由于業(yè)務需求,現在長連接機制是由客戶端發(fā)送ping 每10s 服務端回復pong的機制來維持的
開始的時候是由服務器發(fā)送ping 客戶端回復pong的機制,但是測試由于客戶端掉線檢測不夠靈敏,所以改為了客戶端主動發(fā)送ping的模式,
提問:
現在要檢測客戶端的在線情況,如果由客戶端發(fā)送ping的模式服務器回復pong(onMessage),onClose回調是否依然有效呢(1、網絡斷開 2、斷電),觸發(fā)的時間能否保證呢
有效。觸發(fā)時間和服務端發(fā)送ping區(qū)別不大
客戶端定時發(fā)送心跳(推薦)
客戶端定時(間隔最好小于60秒)向服務端發(fā)送心跳。服務端類似以下配置:
$gateway = new Gateway("Websocket://0.0.0.0:8585");
$gateway->pingInterval = 55;
$gateway->pingNotResponseLimit = 1;
$gateway->pingData = '';
以上配置含義是客戶端連接 pingInterval*pingNotResponseLimit=55 秒內沒有任何請求則服務端認為對應客戶端已經掉線,服務端關閉連接并觸發(fā)onClose回調。
看了一下文檔,這個意思是 55秒必須受到客戶端的任何數據包,否者就觸發(fā)onClose ?
目前我們的心跳包是客戶端發(fā)個一個{"type":"ping"} 服務端回一個{"type":"pong"}
按照上面的設置就可以吧