javawebsocket⼼跳包_websocket⼼跳包的实现⽅案
web socket ⼼跳包的实现⽅案05/30/2010
现在⽹络环境错综复杂,socket⼼跳包是获得健康强壮的连接的有效解决⽅案,今天,我们就在web socket中实现⼼跳包⽅案,是的,尽管我们只是做⼀个简单的聊天室,但我们让他稳定可靠⼀些⼀点也没有错。
我的⼼跳包⽅案很是简单,原理就是间隔发送⼼跳包数据给服务器,服务器在⼀定时间内发回⼼跳包响应,对⽐超时限定,如果超过设定的超时时间,则认为当前与服务器的websocket连接已经断开,关闭当前web socket连接,善后处理,例如重新连接,或者弹出提⽰……
⽐较有⽤的核⼼代码是这样⼦的:
function keepalive( ws ){
var time = new Date();
if( last_health != -1 && ( Time() - 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~' );
}
}
}
这就是⼼跳函数,发送⼼跳包和检测⼼跳健康度。我们将其植⼊到websocket的onopen事件中,来开启⼼跳检测。像这样:
var ws = new WebSocket( to_url );
$("#statustxt").html("connected.");
$("#send_btn").attr("disabled", false);
heartbeat_timer = setInterval( function(){keepalive(ws)}, 1000 );
}
websocket和socket
是的,这样⼦就可以实现web socket的⼼跳包,这⾥有些类似于多线程的发送⽅式,在发送⼼跳包的同时,并不影响正常的数据通信,我们的例⼦还是以上次的websocket聊天室来改进,我们可以发现,⼼跳包运⾏过程中,并不会⼲扰到我们的正常聊天。服务端我也进⾏了⼀些修改,原理类似,在超过⼀定时间内都没有收到客户端发来的⼼跳包,则认为该客户端已经掉线,关闭连接,收回资源。
现在,有⼀个新的问题出现,如果我们要⽤php socket来模拟⼼跳包技术,该怎么实现?各位路过的朋友请多指教,感恩戴德。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。