国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
web socket 心跳包的實現(xiàn)方案 - Zend Studio

web socket 心跳包的實現(xiàn)方案05/30/2010

現(xiàn)在網(wǎng)絡環(huán)境錯綜復雜,socket心跳包是獲得健康強壯的連接的有效解決方案,今天,我們就在web socket中實現(xiàn)心跳包方案,是的,盡管我們只是做一個簡單的聊天室,但我們讓他穩(wěn)定可靠一些一點也沒有錯。

我的心跳包方案很是簡單,原理就是間隔發(fā)送心跳包數(shù)據(jù)給服務器,服務器在一定時間內(nèi)發(fā)回心跳包響應,對比超時限定,如果超過設定的超時時間,則認為當前與服務器的websocket連接已經(jīng)斷開,關閉當前web socket連接,善后處理,例如重新連接,或者彈出提示……

比較有用的核心代碼是這樣子的:

function keepalive( ws ){
var time = new Date();
if( last_health != -1 && ( time.getTime() - last_health > health_timeout ) ){
//此時即可以認為連接斷開,可設置重連或者關閉連接
$("#keeplive_box").html( "服務器沒有響應." ).css({"color":"red"});
//ws.close();
}
else{
$("#keeplive_box").html( "連接正常" ).css({"color":"green"});
if( ws.bufferedAmount == 0 ){
ws.send( '~H#C~' );
}
}
}

這就是心跳函數(shù),發(fā)送心跳包和檢測心跳健康度。我們將其植入到websocket的onopen事件中,來開啟心跳檢測。像這樣:

var ws = new WebSocket( to_url );
ws.onopen=function(){
$("#statustxt").html("connected.");
$("#send_btn").attr("disabled", false);
heartbeat_timer = setInterval( function(){keepalive(ws)}, 1000 );
}

是的,這樣子就可以實現(xiàn)web socket的心跳包,這里有些類似于多線程的發(fā)送方式,在發(fā)送心跳包的同時,并不影響正常的數(shù)據(jù)通信,我們的例子還是以上次的websocket聊天室來改進,我們可以發(fā)現(xiàn),心跳包運行過程中,并不會干擾到我們的正常聊天。服務端我也進行了一些修改,原理類似,在超過一定時間內(nèi)都沒有收到客戶端發(fā)來的心跳包,則認為該客戶端已經(jīng)掉線,關閉連接,收回資源。

Demo在這里:http://www.zendstudio.net/libs/websocket/chat/demo2.html

現(xiàn)在,有一個新的問題出現(xiàn),如果我們要用php socket來模擬心跳包技術,該怎么實現(xiàn)?各位路過的朋友請多指教,感恩戴德。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
workerman簡單例子
什么是socket?什么是websocket?兩者有什么區(qū)別?
WebSocket的簡單介紹及應用
移動前端系列——websocket實時互動小游戲
HTML5 WebSocket | 菜鳥教程
WebSocket與Socket
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服