使用tcp協(xié)議 ,設(shè)備斷開(kāi)后沒(méi)有觸發(fā)onClose方法,進(jìn)行下線,當(dāng)服務(wù)端停止后,才會(huì)觸發(fā)onClose方法 ,跪求大佬解答
大佬,沒(méi)太看懂文檔,按照我的理解,是客戶端心跳中斷后,應(yīng)該觸發(fā)onClose ,但是現(xiàn)在只有服務(wù)進(jìn)程徹底斷開(kāi)才會(huì)觸發(fā)onClose
正常的情況客戶端斷開(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)。
以上摘自手冊(cè),解釋了為什么斷電后無(wú)法立刻觸發(fā)onClose。
正常退出是沒(méi)問(wèn)題的,但是設(shè)備斷電,想通過(guò)心跳判斷斷開(kāi),但等了數(shù)個(gè)周期仍沒(méi)有觸發(fā)onClose
設(shè)置好 $gateway->pingNotResponseLimit 不為0,然后restart重啟GatewayWorker,注意是restart,不是reload。