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