协程Coroutine
在SWOOLE模式下建议开启协程异步编程模式(用 rapphp最正确的姿势)
'swoole_http'=>[
'coroutine'=>true//使用协程进行异步编程
]
协程注意事项
使用前建议你充分了解进程,线程,协程各个是什么东西,然后充分认识,异步编程和传统的 php 编程之间的区别
因为数据库连接池的存在, 特别注意 Connection 对象不能注入到对象内,不然拿到的数据库连接会出错,导致严重的问题
记住 swoole 是内存型的所有对像在内存里(特别是 IOC 托管的对象),不会重复创建和销毁, 所以同一个对象中的 属性 可能会同时被多个用户的访问同时 访问到,并且当用户的一次访问结束时 对象的属性也不会别销毁(被 new 出来的对象,左右域只在方法内的对象没有问题啊)
下面的写法是绝对错的
class ContentService {
private $contentList;
public function listContent(){
$this->contentList= Content::select()->limit(1,10)->findAll();
}
public function renderContentUser(){
foreach ($this->contentList as $content) {
$content['user']=User::get($content->id);
}
}
}
class TestController{
private $contentService;
public function _initialize(ContentService $contentService) {
$this->contentService = $contentService;
}
public function test(){
$contents=$this->contentService->listContent();
$this->contentService->renderContentUser();
return $contents;
}
}
上一篇:WebSocketService 下一篇:Context上下文(重要)