控制器訪問 /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";
}