我們有一個(gè)服務(wù)使用EventSource,大部分時(shí)間是正常的,偶爾會(huì)出現(xiàn)訪問EventSource無響應(yīng),不輸出任何數(shù)據(jù),一直加載中。然后重啟webman后,正常,日志沒有輸出任何錯(cuò)誤信息。
事實(shí)上出問題的時(shí)候,連ok2都無法輸出,就是一直加載中
這是哪里的問題呢?如果是調(diào)用第三方API時(shí)出現(xiàn)了問題,比如超時(shí)等,會(huì)不會(huì)影響整體服務(wù)呢
偽代碼
if ($request->header('accept') === 'text/event-stream') {
邏輯代碼塊,調(diào)用第三方API
$connection->send(new ServerSentEvents(['event' => 'message', 'data' =>json_encode($result, JSON_UNESCAPED_UNICODE), 'id' => 1]));
}
$connection->send('ok2');
出現(xiàn)了一個(gè)webman的一個(gè)錯(cuò)誤信息:
2023-06-28 17:51:51 pid:651602 worker[event-source:651738] exit with status 64000
猜測是第三方接口超時(shí)了。
在代碼里記錄下日志吧,看看運(yùn)行到哪里出現(xiàn)了問題。
阻塞調(diào)用第三方接口超時(shí)會(huì)影響服務(wù)器,比如超時(shí)30秒不返回,這個(gè)進(jìn)程30秒內(nèi)就處理不了其它請求,就會(huì)出現(xiàn)你說的情況。
具體什么情況還是要記錄日志定位。另外調(diào)用接口時(shí)設(shè)置下超時(shí)時(shí)間,時(shí)間短點(diǎn)比如2秒甚至1秒,這樣不至于影響太長時(shí)間。