協程注意事項
變量使用
- 在協程中,需要特別注意,不要使用
$_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);
}