关于websocket中的心跳..
客户端的实现:
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.客户端每隔一段时间检查,服务端的心跳时间是否大于超时时间久可以了....
就是说.客户端不用去向服务端发送心跳.
关于websocket中的心跳..的更多相关文章
- AndroidPN中的心跳检测
在AndroidPN客户端里存在着心跳检测功能.就是每隔一段时间客户端向服务器端发送一个消息,以检测连接是否正常,发送的消息内容为: <presence id="h09Ke-13&qu ...
- c# 在 websocket 中访问 session
今天的项目需要用到websocket,但是中websocket中无法直接访问session,一访问session就出错,断开连接. 找了老半天百度也没有相关c#的介绍和方法,没办法,找不到现成的代码, ...
- java websocket中的ping-pong 机制
参考源码: https://github.com/TooTallNate/Java-WebSocket/blob/master/src/main/java/org/java_websocket/cli ...
- Netty 中的心跳检测机制
心跳检测一般存在于建立长连接 或者 需要保活的场景. 心跳的使用场景 长连接的应用场景非常的广泛,比如监控系统,IM系统,即时报价系统,推送服务等等.像这些场景都是比较注重实时性,如果每次发送数据都要 ...
- Netty 中的心跳机制
在TCP长连接或者WebSocket长连接中一般我们都会使用心跳机制–即发送特殊的数据包来通告对方自己的业务还没有办完,不要关闭链接. 网络的传输是不可靠的,当我们发起一个链接请求的过程之中会发生什么 ...
- Python WebSocket长连接心跳与短连接
python websocket 安装 pip install websocket-client 先来看一下,长连接调用方式: ws = websocket.WebSocketApp("ws ...
- 如何在socket编程的Tcp连接中实现心跳协议
from http://blog.csdn.net/nyist327/article/details/39586203 心跳包的发送,通常有两种技术方法1:应用层自己实现的心跳包 由应用程序自己发送心 ...
- 在websocket中怎么样注入service类
最近项目中用到了websocket,遇到很多问题,其中一个是@ServerEndpoint修饰的类无法注入其他的bean,注入的对象都是null,在网上找了好多资料,无意中发现一个朋友的答案给了思路. ...
- WPF中使用定时器 DispatcherTimer 做TCP连接中的心跳 HeartBeat
开发过程中经常遇到定时触发的需求,如:TCP/IP连接中,使用心跳包保持连接或检测连接是否已经中断. WPF中有多种定时器: 1.using System.Windows.Threading; 代码如 ...
随机推荐
- bzoj1385: [Baltic2000]Division expression
欧几里得算法.可以发现规律,a[2]作为分母,其他作为分子,必定是最好的选择.判断是否为整数即可. #include<cstdio> #include<cstring> #in ...
- NOI2010能量采集(数论)
没想到NOI竟然还有这种数学题,看来要好好学数论了…… 网上的题解: 完整的结题报告: 首先我们需要知道一个知识,对于坐标系第一象限任意的整点(即横纵坐标均为整数的点)p(n,m),其与原点o(0,0 ...
- UVALive 3713 Astronauts (2-SAT,变形)
题意: 有A,B,C三种任务,每个人必获得1个任务,大于等于平均年龄的可以选择A和C,小于平均年龄的可以选择B和C.这些人有一些是互相讨厌的,必须不能执行同任务,问能否安排他们工作?若行,输出任意一组 ...
- 问题与解答 [Questions & Answers]
您可以通过发表评论的方式提问题, 我如果有时间就会思考, 并给出答案的链接. 如果您学过Latex, 发表评论的时候请直接输入Latex公式; 反之, 请直接上传图片 (扫描.拍照.mathtype ...
- Ofbiz初探
转:http://xmmartin.blog.51cto.com/2310947/771236 主导建设一个电子商务系统希望从Ofbiz了解中获得一些借鉴1.下载ofbiz,目前的版本是10.04,下 ...
- Jmeter性能测试之如何写Java请求测试用例类
一. 引言: 最近工作中的一个项目要求做性能测试,该项目由提供服务的几个应用组成,选用的框架是阿里巴巴公司开源的服务框架Dubbo.关于Dubbo的介绍,网上也有很多资料,本人只是做了粗略的了解,没有 ...
- 二维坐标的平移,旋转,缩放及matlab实现
本文结合matlab 软件解释二维坐标系下的平移,旋转,缩放 首先确定点在二维坐标系下的表达方法,使用一个1*3矩阵: Pt = [x,y,1] 其中x,y 分别为点的X,Y坐标,1为对二维坐标的三维 ...
- 解决JSP页面无法使用EasyUI里面class="easyui-dialog"的问题
当使用MyEclipse新建一个JSP页面的时候,MyEclipse会自动添加一些标记,这些标记也许不一定会在工程中使用到.比如<base href="<%=basePath%& ...
- 嵌入式开发应该掌握的一些Linux命令
Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统, ...
- DIY 博客全文界面的推荐、反对、加关注、返回顶部、快速评论等小功能的集成
博客园已经很不错了,但作为比较“挑剔”的用户,在使用的过程中,还是有一些地方不爽的. 我不是一个专业的前台程序员,也只能凭借自己蹩脚的JS和CSS知识完成对页面的小改造(专业的大虾莫要鄙视呀..). ...