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 ){ 這就是心跳函數(shù),發(fā)送心跳包和檢測心跳健康度。我們將其植入到websocket的onopen事件中,來開啟心跳檢測。像這樣: var ws = new WebSocket( to_url ); 是的,這樣子就可以實現(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)?各位路過的朋友請多指教,感恩戴德。 |
|
|