首頁 >php框架 >Workerman >workerman如何保持連接

workerman如何保持連接

尚
原創
2019-12-06 14:50:304399瀏覽

workerman如何保持連接

正常的情況用戶端斷開連線會傳送到服務端給服務端一個fin包,服務端收到fin包後得知客戶端連線斷開,立刻觸發onClose事件回呼。

但有些極端狀況如客戶端掉電、網路關閉、拔網路線、路由故障等,這些極端狀況用戶端無法傳送fin包給服務端,服務端便無法知道連線已經中斷。如果客戶端與服務端定時有心跳資料傳輸,則會比較及時的發現連線斷開,觸發onClose事件回呼。

另外路由節點防火牆會關閉長時間不通訊的socket連接,導致socket長連線中斷。所以需要客戶端與服務端定時發送心跳資料保持連線不被斷開。

GatewayWorker中如何設定心跳偵測?

目前GatewayWorker支援兩種心跳偵測,服務端設定多少秒內沒收到心跳關閉連線(建議),同時也支援服務端定時向客戶端傳送心跳資料(不建議)。

客戶端定時發送心跳(建議)

客戶端定時(間隔最好小於60秒)向服務端發送心跳。服務端類似以下設定:

$gateway = new Gateway("Websocket://0.0.0.0:8585");
$gateway->pingInterval = 55;
$gateway->pingNotResponseLimit = 1;
$gateway->pingData = '';

以上設定意義是客戶端連線 pingInterval*pingNotResponseLimit=55 秒內沒有任何請求則服務端認為對應客戶端已經斷線,服務端關閉連線並觸發onClose回呼。

更多workerman知識請關注workerman教學專欄。

以上是workerman如何保持連接的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn