协程注意事项

变量使用

  • 在协程中,需要特别注意,不要使用$_GET$_POST$GLOBALS等超全局变量,尤其是需要修改变量值并读取时,将造成协程间变量数据错乱。
  • 协程中访问外部变量必须使用use关键字,或者传形参方式,不能引用变量。
  • 如果需要做多协程之间的通信,可使用channel方式通信。

扩展冲突

  • xdebugxhprofblackfirezend扩展不兼容,例如不能使用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);
}