协程注意事项
变量使用
- 在协程中,需要特别注意,不要使用
$_GET
,$_POST
,$GLOBALS
等超全局变量,尤其是需要修改变量值并读取时,将造成协程间变量数据错乱。 - 协程中访问外部变量必须使用
use
关键字,或者传形参方式,不能引用变量。 - 如果需要做多协程之间的通信,可使用
channel
方式通信。
扩展冲突
- 与
xdebug
、xhprof
、blackfire
等zend
扩展不兼容,例如不能使用xhprof
对协程server
进行性能分析采样。
退出协程
在Swoole>=v4.1.0
之后,使用exit
退出将只退出当前协程,并在当前协程抛出一个Swoole\ExitException
。
在Swoole<v4.1.0
时,如果使用exit
,将会造成整个进程退出,禁止使用。
通过拦截Swoole\ExitException
异常,可获得这次退出的信息。
<?php
go(function (){
try{
test();
}catch (\Swoole\ExitException $exception){
var_dump($exception);
}
});
function test(){
test2();
}
function test2(){
exit(2);
}