协程Coroutine

在SWOOLE模式下建议开启协程异步编程模式(用 rapphp最正确的姿势)

  1. 'swoole_http'=>[
  2. 'coroutine'=>true//使用协程进行异步编程
  3. ]

协程注意事项


使用前建议你充分了解进程,线程,协程各个是什么东西,然后充分认识,异步编程和传统的 php 编程之间的区别

因为数据库连接池的存在, 特别注意 Connection 对象不能注入到对象内,不然拿到的数据库连接会出错,导致严重的问题

记住 swoole 是内存型的所有对像在内存里(特别是 IOC 托管的对象),不会重复创建和销毁, 所以同一个对象中的 属性 可能会同时被多个用户的访问同时 访问到,并且当用户的一次访问结束时 对象的属性也不会别销毁(被 new 出来的对象,左右域只在方法内的对象没有问题啊)

下面的写法是绝对错的

  1. class ContentService {
  2. private $contentList;
  3. public function listContent(){
  4. $this->contentList= Content::select()->limit(1,10)->findAll();
  5. }
  6. public function renderContentUser(){
  7. foreach ($this->contentList as $content) {
  8. $content['user']=User::get($content->id);
  9. }
  10. }
  11. }
  12. class TestController{
  13. private $contentService;
  14. public function _initialize(ContentService $contentService) {
  15. $this->contentService = $contentService;
  16. }
  17. public function test(){
  18. $contents=$this->contentService->listContent();
  19. $this->contentService->renderContentUser();
  20. return $contents;
  21. }
  22. }

上一篇:WebSocketService   下一篇:Context上下文(重要)