swoft 使用協程 初試


控制器訪問 /hi

/**
	 * @Swoft\Bean\Annotation\Mapping\Inject("UserService")
	 * @var  UserService
	 */
	public $userService;
    /**
     * @RequestMapping("/")
     * @throws Throwable
     */
    public function index(): Response
    {
        /** @var Renderer $renderer */
        $renderer = Swoft::getBean('view');
        $content  = $renderer->render('home/index');

        return context()->getResponse()->withContentType(ContentType::HTML)->withContent($content);
    }

    /**
     * @RequestMapping("/hi")
     *
     * @return Response
     */
    public function hi()
    {
		return $this->userService->test();
    }

  

調用service  里面使用協程 最終訪問前端頁面 立馬返回了 數據 

 

UserService.php

<?php


namespace App\Service;
use function foo\func;
use Swoft\Bean\Annotation\Mapping\Bean;
use Swoft\Co;
use Swoft\Log\Helper\CLog;


/**
 * Class UserService
 * @Bean("UserService")
 * @package App\Service
 */
class UserService
{
	public function __construct()
	{
		
	}
	
	public function test()
	{
		Co::create(function(){
			Co::sleep(10);
			for($i=0;$i<10;$i++){
				CLog::info("hello");
			}

		});

		Co::create(function(){
			Co::sleep(20);
			var_dump("world");
		});

		$id = Co::id();
		var_dump($id);
		$id = Co::tid();
		var_dump($id);
		return "nihao";
	}

}

  

過了十秒 和二十秒后分別打印出了數據

 

erver start success (Master PID: 18085, Manager PID: 18090)
int(2)
int(2)
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
2020/07/20-20:22:49 [INFO] App\Service\UserService:App\Service\{closure}(28) hello
string(5) "world"

  

改為幫助函數 

sgo(function(){
Co::sleep(10);
for($i=0;$i<10;$i++){
CLog::info("hello");
}

});

srun

啟動協程並等待執行結束。

 

public function test()
{
srun(function(){
sgo(function(){

for($i=0;$i<10;$i++){
Co::sleep(1);
CLog::info("hello");
}

});

sgo(function(){
for($i=0;$i<10;$i++){
Co::sleep(1);
CLog::warning("hello");
}
});

return true;

});


$id = Co::id();
var_dump($id);
$id = Co::tid();
var_dump($id);
return "nihao";
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM