国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

gatewayworker心跳間隔大于60秒會觸發(fā)onclose嗎?

dou號

手冊上說“客戶端定時每X秒(推薦小于60秒)向服務端發(fā)送特定數(shù)據(jù),服務端設定為X秒沒有收到客戶端心跳則認為客戶端掉線,并關閉連接觸發(fā)onClose回調。” 而之所以推薦小于60秒是因為“很多路由節(jié)點會清理60秒內不活躍的連接,導致還沒來得及發(fā)送心跳,連接就斷開了。”參考自walker大大在https://wenda.workerman.net/question/4615 這個問題中的回復。
問題一:現(xiàn)在我設置的$gateway->pingInterval=60;$gateway->pingNotResponseLimit = 2;即客戶端連接 pingInterval*pingNotResponseLimit=120 秒內沒有任何請求則服務端認為對應客戶端已經掉線,服務端關閉連接并觸發(fā)onClose回調。此時其時長已經大于60秒,是不是就沒有意義了?我的客戶端大概40秒左右會發(fā)一次心跳,我是不是應該設置成$gateway->pingInterval=40;$gateway->pingNotResponseLimit = 1才最合適?
問題二:如果是由于路由節(jié)點清理而斷開的連接是否還能正確調用onclose($client_id)函數(shù)處理業(yè)務?

3021 2 0
2個回答

walkor 打賞

問題1:$gateway->pingInterval=60;$gateway->pingNotResponseLimit = 2; 最壞的情況連接斷開120秒后服務端才檢測到,是否有意義看你是否有依賴onClose的業(yè)務以及120秒延遲能否接受。前端心跳40秒,服務端建議設置成$gateway->pingInterval=50;$gateway->pingNotResponseLimit = 1;。$gateway->pingInterval=50;設置的比40稍大一些,避免網絡延遲造成誤判。
問題2: 這種情況一般會有延遲,一般是心跳檢測的時候才能觸發(fā)

  • dou號 2019-12-25

    我需要在onClose里面更新我的設備狀態(tài),現(xiàn)在發(fā)現(xiàn)有部分設備已經斷電但是狀態(tài)一直沒有更新,通過打印數(shù)據(jù)發(fā)現(xiàn)有兩種可能??赡芤唬涸O備斷電后觸發(fā)了onClose,但是數(shù)據(jù)庫更新失敗,導致設備狀態(tài)沒有更新;可能二:設備斷電后未觸發(fā)onClose。
    按照您對問題一的回復,雖然我需要在onClose中更新設備,但如果我對實時性要求不是很高的話,目前這個設置也可以接受是嗎?
    對于問題二,您的意思是最終還是可以觸發(fā)心跳是嗎?因為我在onClose里面打印未獲取到$_SESSION值的client_id時,并沒有發(fā)現(xiàn)那些已經斷電但是狀態(tài)并未更新的設備的client_id,而這些設備登錄時client_id是存在的

walkor 打賞

手冊有講,設備斷電、斷網(包括路由節(jié)點)這種極端情況不會立刻觸發(fā)onClose。配置為$gateway->pingInterval=60;$gateway->pingNotResponseLimit = 2; 最壞的情況連接斷開120秒后服務端才能觸發(fā)onClose。你對實時性不高可以使用這個配置。

路由節(jié)點清理連接也屬于上述情況。心跳會檢測到連接斷開并觸發(fā)onClose,只不過有延遲。

年代過于久遠,無法發(fā)表回答
??