关于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; 代码如 ...
随机推荐
- bzoj2818gcd
原理很简单 题解我就不自己写了…… 做这题的时候,懂得了一个非常重要的转化:求(x, y) = k, 1 <= x, y <= n的对数等于求(x, y) = 1, 1 <= x, ...
- tar 命令打包,除了某个目录剩下的都打包
tar czvf beifen.tar.gz ./webdata --exclude webdata/uploadfiles
- linux watchdog demo hacking
/********************************************************************** * linux watchdog demo hackin ...
- Java [leetcode 33]Search in Rotated Sorted Array
题目描述: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 ...
- TcxVerticalGrid 汇总
赋值 AOrder.LoadSimpleFromFile(sDefineFile); grdRowFileDefine_PostalCode.Properties.Value := AOrder.Or ...
- 每天学点linux命令--tail,cut,sort,uniq
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新, ...
- WebService的发布及客户端的调用
一.目录 1.JAX-WS发布WebService 1.1 创建一个简单的WS 1.2 打包部署和发布 2.CXF+Spring发布WebService 3.客户端的调用方式 二.正文 1. JAX- ...
- 七牛上传Qt版本
最近在找图床,写博客啥的需要.以前的图床好像挂了,搭在BAE上的图床也挂了,可能BAE3.0更新了吧. 花了点时间写了Qt版本 github地址:https://github.com/wzyuliya ...
- Java 8 中 CAS 的增强
几天前,我偶然地将之前写的用来测试AtomicInteger和synchronized的自增性能的代码跑了一下,意外地发现AtomicInteger的性能比synchronized更好了,经过一番原因 ...
- Java内存管理原理及内存区域详解
一.概述 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁的时间.Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下 ...