博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于websocket中的心跳..
阅读量:4935 次
发布时间:2019-06-11

本文共 1506 字,大约阅读时间需要 5 分钟。

客户端的实现:

1, 如果你正在对流进行读写,那么表示其实你己经在活跃状态,不需要发送心跳消息
2, 如果你的网络是空闲的, 那么需要指定一个时间间隔(如20sec)向server发送心跳消息。
所谓的心跳不过就是当网络空闲时,循环用指定的消息格式向服务器发送消息,服务器收到后也用指定的消息格式返回消息,双方确认都在线。

如果你问的是后台的实现:

1, 一个主机不可以一次只能响应一个client,你需要并发响应,否则client的使用就是恶梦。你可以自己写多线程来处理如何并发,书上都有实例可以抄。 但这样的效率相当低,并且你很难处理多线程间同步和死锁问题,所以Java4以后引入了NIO的机制来解决复杂的服务器并发编程,并且速度非常快, 但是NIO本身却也很复杂, 所以我建议采用第三方开源框架,如APACHE的MINA,不需要重复建造轮子。
2, 但如果你的业务的确需要锁定资源,在同一时间的确只能许一个人响应,比如只想一份资料在同一时间只让一个人编辑等。 你可以先锁定资源,先来者先得,后来者也响应,但只响应一个提示消息,并不得到真正的资源。
3, 所以,先来者因为己经正在读取资源,所以可以确定在线,不需要发送心跳,而后来者每次请求都有消息可以返回,要么是错误提示要么是心跳发送到服务器后的返回,所以只要有消息返回就可以确定双方都网络在线

-----------------------------------------------------------------------------------------------------------

client如何采用socket机制与后台通讯时,网络是长连接的,不像HTTP,

HTTP每次发送消息时,会:
1. create URL connection
2. 获取inputstream 和outputstream
3. 如果是POST,通过 stream 写入数据到后台
4. 等待后台返回数据,并处理,最后回调自己的业务逻辑
5. 必须关闭网络
但Socket方式是明显不同的, 因为一旦create 连接并且后,就不需要每次都关闭连接。你只管发送消息,并且定时取消息。
问题是,我只管从连接通道中取消息的话,怎么知道连接是好的。
所以我们需要过一段时间就去试探一下连接是否好的,如果不是好的就重连一下。这就是发送心跳的目的。
当然发送心跳包是要等网络空闭时才能发, 因为发送消息到后台也是需要消费网络带宽的,是需要时间的,如果发太多,或者正准备发送你的业务数据到后台之前就先发送了一堆心跳包到后台,则你的业务包要等待一段长时间,不是好的体验。
那么怎以样才算网络空闭呢?
这里要用到消息队列一个数组, 你每次需要向后台发送数据的时候都把数据封装成一个发送任务,放在你的消息队列里,你有一个线程,设每秒运行一次,每次运行时扫描队列是否有任务,如果有则发送到后台,没有则表示网络空闲,你的心跳计时器还发启动,计时到20秒时,插一个心跳任务到你的队列

-------------------------------------------------------------------

socket.io..和pomelo的socket都实现了心跳..

1.服务端向客户端发送心跳..,客户端记录接受心跳的时间..

2.客户端每隔一段时间检查,服务端的心跳时间是否大于超时时间久可以了....

 

就是说.客户端不用去向服务端发送心跳.

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/zhepama/p/3504508.html

你可能感兴趣的文章
中文分词十年回顾结论 黄昌宁
查看>>
冒泡排序、36选7不重复、水仙花数、九九乘法表等案例
查看>>
placeholder 效果的实现,input提示字,获取焦点时消失
查看>>
SQL Server T—SQL 语句【建 增 删 改】(建外键)
查看>>
poj3122Pie
查看>>
Outlook自动回复功能无法使用
查看>>
CentOS7中开机出现end_request:I/O error,dev fd0,sector 0的解决办法
查看>>
Linux安装net-snmp
查看>>
Mongo客户端
查看>>
C#异步语法糖的苦与甜
查看>>
题目1138:进制转换
查看>>
如何写一份优秀的java程序员简历
查看>>
Apache Flink - Window
查看>>
rtc关机闹钟2 Alarm manager
查看>>
转:利用ant与jmeter实现负载测试自动化
查看>>
异常处理机制(Begin try Begin Catch)
查看>>
电脑监控软件实现(截图端、服务端、监控端)
查看>>
maven调用内部tomcat插件启动出错与解决
查看>>
009.学习资源和计划管理
查看>>
POJ2418Hardwood Species
查看>>