- 编程须知
- 编程范式
- 扩展冲突
- 严重错误
编程须知
使用Swoole
协程特性,请认真阅读本页编程须知。
编程范式
- 协程内部禁止使用全局变量
- 协程使用
use
关键字引入外部变量到当前作用域禁止使用引用 - 协程之间通讯必须使用
Channel
即协程之间通讯不要使用全局变量或者引用外部变量到当前作用域,而要使用Channel
- 项目中如果有扩展
hook
了zend_execute_ex
或者zend_execute_internal
,需要特别注意一下c栈。可以使用co::set
重新设置C
栈大小
hook
这两个入口函数后,大部分情况下会把平坦的php指令调用变为C
函数调用,增加c栈的消耗。
扩展冲突
由于某些跟踪调试的PHP
扩展大量使用了全局变量可能会导致Swoole
协程发生崩溃。请关闭这些相关扩展。
包括4.0
和2.0
- xdebug
- phptrace
- aop
- molten
- xhprof
- phalcon(
Swoole
协程无法运行在phalcon
框架中)
严重错误
以下行为会导致出现严重错误。
- 在多个协程间共用一个连接
- 使用类静态变量/全局变量保存上下文