php websocket 心跳包,websocket 心跳包重连
上次我們講過(guò)了websocket斷線重連的問(wèn)題,那么久會(huì)有人提出疑問(wèn)了,心跳包重連跟斷線重連有什么區(qū)別呢?
其實(shí)這兩個(gè)都是為了達(dá)到一個(gè)目的,那就是保證當(dāng)前設(shè)備的網(wǎng)絡(luò)狀態(tài)保持通暢。。。而斷線重連呢,只能保證網(wǎng)絡(luò)失去連接的時(shí)候有效,并不能保證網(wǎng)絡(luò)斷開(kāi)的時(shí)候有效。。。這么說(shuō)可能就有很多人迷糊了,這兩者之間有什么區(qū)別呢?
其實(shí)很簡(jiǎn)單哈,至少我是這么理解的。網(wǎng)絡(luò)失去連接的時(shí)候是你手動(dòng)關(guān)閉網(wǎng)絡(luò)或禁用網(wǎng)絡(luò)時(shí),這個(gè)時(shí)候會(huì)觸發(fā)到websocket中的onclose事件,也就是說(shuō)他會(huì)觸發(fā)斷線重連,
而網(wǎng)絡(luò)斷開(kāi)的時(shí)候呢,指的是比較簡(jiǎn)單粗暴的方法,例如直接拔網(wǎng)線之類(lèi)的。。。。而這個(gè)時(shí)候呢是不會(huì)觸發(fā)onclose事件的,那這個(gè)時(shí)候我們要怎么辦呢,我們就需要用到心跳重連了
好啦,說(shuō)了這么多,現(xiàn)在我們直接來(lái)看代碼吧。。。。
首先是斷線重連,這個(gè)我們就不說(shuō)了,如果沒(méi)明白的可以去看我寫(xiě)的另外一篇關(guān)于斷線重連的文章,這里我就不多說(shuō)了。。。。
那么我們重點(diǎn)來(lái)講一下心跳包重連
if (jsonGotData.hasOwnProperty('id')) {
timestampVal = new Date(jsonGotData.now_time);
heartbeatLive(webSocket, timestampVal);
}
if (jsonGotData.hasOwnProperty('heartbeat')) {
timestampVal = new Date(jsonGotData.heartbeat);
return heartbeatLive(webSocket, timestampVal);
}
這是在onmessage中收到信息時(shí)候的處理,那么我們來(lái)具體分析
if (jsonGotData.hasOwnProperty('id')) {
timestampVal = new Date(jsonGotData.now_time);
heartbeatLive(webSocket, timestampVal);
}
首先這里我們是判斷服務(wù)端發(fā)送的是不是id字段,這使得我們可以來(lái)初始化發(fā)送時(shí)間
if (jsonGotData.hasOwnProperty('heartbeat')) {
timestampVal = new Date(jsonGotData.heartbeat);
return heartbeatLive(webSocket, timestampVal);
}
然后是判斷服務(wù)端有沒(méi)有發(fā)送heartbeat字段來(lái)判斷是不是在心跳周期之內(nèi)
OK,那么來(lái)看具體的心跳函數(shù)
heartbeatLive = (function(_this) {
return function(conn, nowTime) {
var nowtime, hbt;
nowtime = new Date();
if ((nowTime.add({
minutes: 1
})).isBefore(androidNowtime)) {
clearTimeout(hbt);
return newConnection();
}
return hbt = setTimeout(function() {
return conn.send('heartbeat');
}, 60000);
};
})(this);
這個(gè)心跳函數(shù)的功能是怎么樣的呢,主要的邏輯是將本地的時(shí)間與獲取到服務(wù)器的心跳時(shí)間做一個(gè)比較,判斷我們的心跳階段是不是處于一個(gè)“健康期”,如果存在的話,那自然是繼續(xù)正常的心跳啦,那如果不正常的話,我們就要來(lái)重連了。。。
而我們用這個(gè)心跳重連的方法呢,就可以保證某些傻小白把網(wǎng)線給拔了,都不知道問(wèn)題出在哪里,這樣就可以放心地使用我們的消息推送了,哈哈。。。
來(lái)自:http://my.oschina.net/codingBingo/blog/634947
總結(jié)
以上是生活随笔為你收集整理的php websocket 心跳包,websocket 心跳包重连的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle访问远程db2,如何在DB2
- 下一篇: oracle安装就是home3,rhel