协程注意事项

变量使用

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

扩展冲突

  • swoole 协程与 xdebugxhprofblackfirezend 扩展不兼容,例如不能使用 xhprof 对协程 server 进行性能分析采样。

退出协程

Swoole >= v4.1.0 之后,使用 exit 退出将只退出当前协程,并在当前协程抛出一个 Swoole\ExitException 异常。

Swoole < v4.1.0 时,如果使用 exit,将会造成整个进程退出,禁止使用。

通过拦截 Swoole\ExitException 异常,可获得这次退出的具体异常信息。

简单使用示例:

  1. <?php
  2. go(function () {
  3. try {
  4. test();
  5. } catch (\Swoole\ExitException $exception) {
  6. var_dump($exception);
  7. }
  8. });
  9. function test()
  10. {
  11. test2();
  12. }
  13. function test2()
  14. {
  15. exit(2);
  16. }