java websocket心跳包_web socket 心跳包的实现方案

本文介绍了一种WebSocket心跳包的实现方案,通过在Websocket连接中设置定时发送心跳包,若服务器在预设时间内未响应则认为连接断开。核心代码包括心跳检测函数及其在Websocket `onopen` 事件中的应用。同时提出问题,讨论如何使用PHP Socket来模拟此心跳包技术。
摘要由CSDN通过智能技术生成

web socket 心跳包的实现方案05/30/2010

现在网络环境错综复杂,socket心跳包是获得健康强壮的连接的有效解决方案,今天,我们就在web socket中实现心跳包方案,是的,尽管我们只是做一个简单的聊天室,但我们让他稳定可靠一些一点也没有错。

我的心跳包方案很是简单,原理就是间隔发送心跳包数据给服务器,服务器在一定时间内发回心跳包响应,对比超时限定,如果超过设定的超时时间,则认为当前与服务器的websocket连接已经断开,关闭当前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~' );

}

}

}

这就是心跳函数,发送心跳包和检测心跳健康度。我们将其植入到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 );

}

是的,这样子就可以实现web socket的心跳包,这里有些类似于多线程的发送方式,在发送心跳包的同时,并不影响正常的数据通信,我们的例子还是以上次的websocket聊天室来改进,我们可以发现,心跳包运行过程中,并不会干扰到我们的正常聊天。服务端我也进行了一些修改,原理类似,在超过一定时间内都没有收到客户端发来的心跳包,则认为该客户端已经掉线,关闭连接,收回资源。

现在,有一个新的问题出现,如果我们要用php socket来模拟心跳包技术,该怎么实现?各位路过的朋友请多指教,感恩戴德。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值