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来模拟心跳包技术,该怎么实现?各位路过的朋友请多指教,感恩戴德。

java websocket心跳包_web socket 心跳包的实现方案相关推荐

  1. c 语言socket粘包,C# Socket粘包处理讲解示例

    当socket接收到数据后,会根据buffer的大小一点一点的接收数据,比如: 对方发来了1M的数据量过来,但是,本地的buffer只有1024字节,那就代表socket需要重复很多次才能真正收完这逻 ...

  2. C语言socket重连和心跳,c# socket 心跳 重连

    /// /// 检查一个Socket是否可连接 /// /// /// private bool IsConnected(Socket socket) { if (socket == null || ...

  3. java udp心跳机制,Socket心跳包机制总结

    跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着.事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一 ...

  4. java mysql 心跳包_java socket及java心跳

    java socket 心跳 在JAVA socket 异步操作中经常会用到心跳机制去检查服务器端是否在线,其实这个很容易实现,就是开启一个新的线程,在run方法里去给服务器端发心跳包,但是这一步是可 ...

  5. java socket 心跳包_socket中的短连接与长连接,心跳包示例详解

    TCP连接简介 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接, 当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接, 连接的建立是需要三 ...

  6. java socket——心跳包

    首先先说说心跳包在socket连接中的意义: 通过socket连接的双方为了保证在一段时间未发消息不被防火墙断开连接或者使对方及时知道自己是否已经断线而定期给对方发送的某些特殊标识字符,这个字符可以根 ...

  7. php 如何实现心跳包,Socket心跳机制-JS+PHP实现

    本文是我在实际工作中用到的Socket通信,关于心跳机制的维护方式,特意总结了一下,希望对朋友们有所帮助. Socket应用:首先Socket 封装了tcp协议的,通过长连接的方式来与服务器通信,是由 ...

  8. web socket 心跳包的实现方案

    web socket 心跳包的实现方案05/30/2010 现在网络环境错综复杂,socket心跳包是获得健康强壮的连接的有效解决方案,今天,我们就在web socket中实现心跳包方案,是的,尽管我 ...

  9. Socket心跳包机制总结

         跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着.事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包 ...

最新文章

  1. 用Scrum看板工具Leangoo做Sprint迭代管理-看板分享
  2. 微信七年回顾:历经多少质疑和差评,才配拥有今天的强大
  3. shell中sed命令的用法
  4. ContentProvider学习笔记
  5. 万物根源-一分钟教你发布npm包
  6. java icomparer_集合数据处理(C#、JavaScript 和 Java)
  7. python3的float数精度_Python numpy 浮点数精度问题
  8. svn: Can't open file '/a/b/db/txn-current-lock': Permission denied
  9. 备抵附加账户的期末余额_会计账户的分类(二)
  10. 制造业数字化经营新思路:管理平台架构及三大落地方法论
  11. RESTful API实现APP订餐实例
  12. Java高级语法笔记-文件读写(2)
  13. 三层架构之初识庐山真面目
  14. 上传本地代码到GitHub遇到问题记录
  15. 图像处理:同态滤波(Homomorphic filter)
  16. 科技文献检索系统的详细分类介绍 - 易智编译EaseEditing
  17. leetcode:1000. 合并石头的最低成本(区间dp,困难)
  18. 怎么逼自己 成为一个上进的人
  19. android studio app字体大小设置,Android Studio App设置TextView文字内容大小颜色
  20. 已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行(2行)

热门文章

  1. 利用Huffman树进行文本编码解码的实现
  2. matlab如何求1的平方一直加到n的平方
  3. 矩阵理论| 特殊矩阵:幂等矩阵、投影、正交投影
  4. 计算机游戏快速退出的快捷键,结束进程快捷键,小编教你电脑结束进程快捷键怎么操作...
  5. 升流式水解酸化反应器设计计算_升流式电催化水解酸化反应方法
  6. 学长前辈的美少女手办,够买一平厕所的不。。。
  7. 小米荣获首张智能家居系统用户体验水平泰尔测评证书
  8. 游戏建模软件学习选择Max还是Maya呢?场景建模都用到哪些
  9. 物联网IoT大挑战:计算电池寿命
  10. web页面 新消息提示音