協程注意事項
變量使用
- 在協程中,需要特別注意,不要使用
$_GET、$_POST、$GLOBALS等超全局變量,尤其是需要修改變量值并讀取時,將造成協程間變量數據錯亂。 - 協程中訪問外部變量必須使用
use關鍵字,或者傳形參方式,不能引用變量。 - 如果需要做多協程之間的通信,可使用
channel方式通信。
擴展沖突
swoole協程與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);
}