小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 gyb98 2010-12-24

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

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

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

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

function keepalive( ws ){
var time = new Date();
if( last_health != -1 && ( time.getTime() - last_health > health_timeout ) ){
//此時即可以認(rèn)為連接斷開,可設(shè)置重連或者關(guān)閉連接
$("#keeplive_box").html( "服務(wù)器沒有響應(yīng)." ).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聊天室來改進(jìn),我們可以發(fā)現(xiàn),心跳包運行過程中,并不會干擾到我們的正常聊天。服務(wù)端我也進(jìn)行了一些修改,原理類似,在超 過一定時間內(nèi)都沒有收到客戶端發(fā)來的心跳包,則認(rèn)為該客戶端已經(jīng)掉線,關(guān)閉連接,收回資源。

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

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多