項目背景:自動售貨機,自動售貨機可以設(shè)定服務(wù)IP 端口 心跳間隔(只能設(shè)定最小間隔為60s 目前就是設(shè)定的60s)
服務(wù)端:gatewayworker [php start.php start -d啟動、pingInterval =70 && pingNotResponseLimit = 1、啟動之后workerman.log無報錯信息 整體服務(wù)正常]
問題:機器主板發(fā)送心跳給服務(wù)端 機器主板固定心跳間隔不得小于60秒 目前主體正常 但是每20分鐘左右client_id(服務(wù)端會話id)都會發(fā)生變化 導(dǎo)致機器不能出貨 因為斷開長連接了 拿到的那個存儲的client_id無效 有沒有好的方法可以保持盡量不在70秒的時候長連接就掛了
不要存client_id,client_id是連接id,連接斷開就沒有用了,不要指望連接能一直維持不斷,那不現(xiàn)實。
使用Gateway::bindUid($client_id, 設(shè)備id)
將client_id和設(shè)備id綁定,利用 Gateway::sendToUid(設(shè)備id, 數(shù)據(jù))
給設(shè)備發(fā)送數(shù)據(jù)。這樣就不用擔(dān)心client_id變化問題。
設(shè)備心跳間隔最好小于60秒,因為外網(wǎng)環(huán)境復(fù)雜,有些路由節(jié)點可能會清理60秒不活躍的連接導(dǎo)致連接斷開。