workerman如何保持連接

workerman如何保持連接

正常的情況客戶端斷開(kāi)連接會(huì)向服務(wù)端發(fā)送一個(gè)fin包,服務(wù)端收到fin包后得知客戶端連接斷開(kāi),則立刻觸發(fā)onClose事件回調(diào)。

但是有些極端情況如客戶端掉電、網(wǎng)絡(luò)關(guān)閉、拔網(wǎng)線、路由故障等,這些極端情況客戶端無(wú)法發(fā)送fin包給服務(wù)端,服務(wù)端便無(wú)法知道連接已經(jīng)斷開(kāi)。如果客戶端與服務(wù)端定時(shí)有心跳數(shù)據(jù)傳輸,則會(huì)比較及時(shí)的發(fā)現(xiàn)連接斷開(kāi),觸發(fā)onClose事件回調(diào)。

另外路由節(jié)點(diǎn)防火墻會(huì)關(guān)閉長(zhǎng)時(shí)間不通訊的socket連接,導(dǎo)致socket長(zhǎng)連接斷開(kāi)。所以需要客戶端與服務(wù)端定時(shí)發(fā)送心跳數(shù)據(jù)保持連接不被斷開(kāi)。

GatewayWorker中如何配置心跳檢測(cè)?

目前GatewayWorker支持兩種心跳檢測(cè),服務(wù)端設(shè)定多少秒內(nèi)沒(méi)收到心跳關(guān)閉連接(推薦),同時(shí)也支持服務(wù)端定時(shí)向客戶端發(fā)送心跳數(shù)據(jù)(不推薦)。

客戶端定時(shí)發(fā)送心跳(推薦)

客戶端定時(shí)(間隔最好小于60秒)向服務(wù)端發(fā)送心跳。服務(wù)端類似以下配置:

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

以上配置含義是客戶端連接?pingInterval*pingNotResponseLimit=55?秒內(nèi)沒(méi)有任何請(qǐng)求則服務(wù)端認(rèn)為對(duì)應(yīng)客戶端已經(jīng)掉線,服務(wù)端關(guān)閉連接并觸發(fā)onClose回調(diào)。

更多workerman知識(shí)請(qǐng)關(guān)注workerman教程欄目。

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享