gateway進(jìn)程數(shù)為4,客戶端會(huì)傳來大量的數(shù)據(jù)到onMessage方法,onMessage中要處理大量的數(shù)據(jù)
這樣會(huì)不會(huì)導(dǎo)致onMessage無法接收到心跳,從而導(dǎo)致websocket連接被強(qiáng)制斷開
中間還有2次心跳,客戶端發(fā)了,但后端好像沒有收到
32分35秒時(shí)websocket連接無故被斷開
33分12秒時(shí)客戶端重新連接成功
現(xiàn)在不知道為何被斷開了
// 心跳間隔
$gateway->pingInterval = 50;
$gateway->pingInterval = 50; 含義是客戶端50秒內(nèi)沒發(fā)來心跳,則關(guān)閉連接,和businessWorker的onMessage沒有關(guān)系。
websocket連接斷開是很正常的現(xiàn)象,瀏覽器刷新,電腦休眠,手機(jī)瀏覽器進(jìn)入后臺(tái),切換tab頁面后原頁面js被暫停(心跳無法發(fā)送),網(wǎng)絡(luò)波動(dòng)等很多情況都可能導(dǎo)致??蛻舳俗龊弥剡B就行。
因?yàn)榭蛻舳耸且粋€(gè)攝像頭需要實(shí)時(shí)拍照,斷開幾秒會(huì)出現(xiàn)漏拍情況
所以websocket連接始終不可以斷開,現(xiàn)在客戶端每隔30秒就會(huì)發(fā)一個(gè)心跳數(shù)據(jù)到onMessage上
但現(xiàn)在從tcpdump上看,好像有的心跳數(shù)據(jù)并沒有接收到,所以導(dǎo)致斷開了,為啥沒接收到,暫時(shí)還沒找到原因
抓包看心跳有沒有發(fā)上來,另外抓包能看到是誰關(guān)閉的連接。如果是客戶端關(guān)閉的,需要從客戶端找問題。
也有可能客戶端發(fā)送數(shù)據(jù)快于onMesasge處理速度,導(dǎo)致消息積壓,心跳消息沒處理到。