由于業(yè)務(wù)需求,現(xiàn)在長連接機制是由客戶端發(fā)送ping 每10s 服務(wù)端回復(fù)pong的機制來維持的
開始的時候是由服務(wù)器發(fā)送ping 客戶端回復(fù)pong的機制,但是測試由于客戶端掉線檢測不夠靈敏,所以改為了客戶端主動發(fā)送ping的模式,
提問:
現(xiàn)在要檢測客戶端的在線情況,如果由客戶端發(fā)送ping的模式服務(wù)器回復(fù)pong(onMessage),onClose回調(diào)是否依然有效呢(1、網(wǎng)絡(luò)斷開 2、斷電),觸發(fā)的時間能否保證呢
有效。觸發(fā)時間和服務(wù)端發(fā)送ping區(qū)別不大
客戶端定時發(fā)送心跳(推薦)
客戶端定時(間隔最好小于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)沒有任何請求則服務(wù)端認為對應(yīng)客戶端已經(jīng)掉線,服務(wù)端關(guān)閉連接并觸發(fā)onClose回調(diào)。
看了一下文檔,這個意思是 55秒必須受到客戶端的任何數(shù)據(jù)包,否者就觸發(fā)onClose ?
目前我們的心跳包是客戶端發(fā)個一個{"type":"ping"} 服務(wù)端回一個{"type":"pong"}
按照上面的設(shè)置就可以吧