我知道gatewayworker里面,正常關(guān)閉客戶端或者服務(wù)器主動(dòng)關(guān)閉都會(huì)調(diào)用onClose函數(shù),極端情況下不會(huì)調(diào)用,這樣客戶端下線,服務(wù)器是無感知的,如果心跳由服務(wù)器主動(dòng)發(fā)送,就可以規(guī)避這種極端情況不調(diào)用onClose
不過現(xiàn)在的情況是:心跳必須由硬件維持(特殊情況),我想通過定時(shí)器來實(shí)現(xiàn)對鏈接的監(jiān)控,如果超過三十秒沒有接到硬件發(fā)來的心跳數(shù)據(jù)或其他數(shù)據(jù),則主動(dòng)關(guān)閉鏈接,觸發(fā)onClose事件,然后我發(fā)現(xiàn)現(xiàn)在的定時(shí)器定時(shí)后,要么到時(shí)間執(zhí)行,要么刪除,有沒有辦法更新它的執(zhí)行時(shí)間,比如三十秒內(nèi)接到了心跳,就重置定時(shí)器時(shí)間,覺得如果每次心跳都新建一個(gè)定時(shí)器,然后又刪除,這樣會(huì)比較占用資源吧,影響效率
GatewayWorker里自帶心跳功能,可以做到超過多久沒收到任何數(shù)據(jù)就關(guān)閉連接。
http://doc2.workerman.net/heartbeat.html
設(shè)置那個(gè)$gateway->pingNotResponseLimit