JAVA之长连接、短连接和心跳包
短连接:
client向server发起连接,server接到请求,双方建立连接,client向server发送消息,server回应client,一次读写完成双方都可以发起close请求
- 优点:短连接对于服务器来说较为简单,存在的连接都是有用的连接,不需要额外的控制。
- 缺点:如果客户端连接频繁,会在tcp的建立和关闭上浪费时间。
长连接:
client向server发起连接,server接到请求,双方建立连接,client向server发送消息,server回应client,一次读写完成,连接不关闭,后续读写操作,长时间操作之后client发起关闭请求。
- 优点:长连接可以省去较多的tcp建立/关闭的操作,减少浪费,节省时间,对于频繁请求资源的客户,较适用于长连接
- 缺点:client和server如果长时间不关闭的话,会存在一个问题,随着客户的越来越多,server早晚会有扛不住的一天,这时需要采取一些策略,如关闭一些长时间不读写操作的连接,这样可以避免一些恶意连接导致server端服务受损,如果条件再允许,就可以以客户端为颗粒度,限制每个客户端的最大连接数
心跳包
很多应用层协议都有HeartBeat机制,通常是客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线,并传输一些可能必要的数据。使用心跳包的典型协议是IM,比如QQ/MSN/飞信等协议。
心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。
在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。
心跳包一般来说都是在逻辑层发送空的echo包来实现的。下一个定时器,在一定时间间隔下发送一个空包给客户端,然后客户端反馈一个同样的空包回来,服务器如果在一定时间内收不到客户端发送过来的反馈包,那就只有认定说掉线了。
其实,要判定掉线,只需要send或者recv一下,如果结果为零,则为掉线。但是,在长连接下,有可能很长一段时间都没有数据往来。理论上说,这个连接是一直保持连接的,但是实际情况中,如果中间节点出现什么故障是难以知道的。更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的连接给断掉。在这个时候,就需要我们的心跳包了,用于维持长连接,保活。
在获知了断线之后,服务器逻辑可能需要做一些事情,比如断线后的数据清理呀,重新连接呀……当然,这个自然是要由逻辑层根据需求去做了。
总的来说,心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。
JAVA之长连接、短连接和心跳包相关推荐
- HTTP - 长连接 短连接 长轮询 短轮询 心跳机制
错觉与突然的察觉 大多数人都知道HTTP1.0不支持长连接,知道HTTP1.1支持长连接. 这是业界的一个常识. 然而这样的描述导致了一些不做网络底层开发的开发者都下意识的认为HTTP1.1是一个可以 ...
- 转载的HTTP长连接短连接和无状态的理解
HTTP长连接和短连接以及推送服务原理 HTTP长连接和短连接1 1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用 ...
- UDP与TCP区别以及长、短连接
长连接 也叫持久连接,在TCP层握手成功后,不立即断开连接,并在此连接的基础上进行多次消息(包括心跳)交互,直至连接的任意一方(客户端OR服务端)主动断开连接,此过程称为一次完整的长连接.HTTP1. ...
- http协议之长连接与短连接服务器,长连接短连接
HTTP 协议与 TCP/IP 协议的关系 HTTP 协议是应用层的协议,而 TCP 协议是传输层的协议,IP 协议是网络层的协议. IP 协议主要解决网络路由以及寻址等问题,而 TCP 协议主要解决 ...
- nginx 代理tcp长连接短连接配置
nginx使用ngx_stream_core_module模块代理tcp长连接短连接,可以增强服务器的容灾能力 下面是一个配置信息,自己也方便记录一下
- 04-长连接,短连接,连接池
一. 短连接 短连接是指程序和数据库通信时需要建立连接,执行操作后,连接关闭.短连接简单来说就是每一次操作数据库,都要打 开和关闭数据库连接. 基本步骤是:连接→数据传输→关闭连接. 二. 长连接 长 ...
- [Golang] 从零開始写Socket Server(3): 对长、短连接的处理策略(模拟心跳)
通过前两章,我们成功是写出了一套凑合能用的Server和Client,并在二者之间实现了通过协议交流.这么一来,一个简易的socket通讯框架已经初具雏形了,那么我们接下来做的.就是想办法让这个框架更 ...
- java mina长连接短连接_MINA实现TCP长连接(四)——断开重连
前言 今天涉及以下内容: mina官网及实现客户端需要的jar包 客户端实现重连接涉及到的几个类 重连接在Activity中的使用 效果图和项目结构图 重连接涉及到的类源码 先来波效果图 image. ...
- HTTP长连接短连接
一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...
- http 长连接 短连接
一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...
最新文章
- 刚刚,科学家发现了一大堆解释人类进化的基因...
- python如何返回多个值_python- 如何返回多个值 | 学步园
- 获取自定义data的几种属性
- 初见 IsolatedStorage
- ihtml2document能不能根据id获取dom_使用DOM进行XML文件的解析
- python运行外部程序_在Python中运行外部程序(可执行文件)?
- 最近在SDK下使用WebBrowser遇到了个问题
- Javascript的错误处理
- 家用电脑改成无盘服务器,怎么把自己家电脑硬盘弄成无盘
- python杨辉三角编程_Python基础练习实例49(打印杨辉三角)
- 微信公众开放平台开发05---jetty部署异常:rg.apache.jasper.JasperException: PWC6345: There is an error in invoking ja
- 5. Zend_Log
- Ping命令返回错误信息说明
- freeradius mysql web_CentOS7部署FreeRadius3.0及WEB管理界面DaloRadius
- c语言99乘法表 倒三角形书写
- IsValid() 的用法
- java评论功能怎么实现_评论功能的简单实现
- 十分钟教你写个软件防火墙!powershell。
- 【C++】公积金贷款计算器
- 月薪40K起,什么是Python全栈工程师?全栈工程师薪资为何这么高?
热门文章
- 0 、 ‘0‘ 、 “0“ 、 ’\0’ 区别
- 最短路径算法之Dijkstra算法(java实现)
- 关于移动MM购买的相关资料
- 少年派的奇幻漂流-解读与感悟
- 中日海军实力分类比较
- 钢铁骑士团服务器端文件,《钢铁骑士团》新手必读 游戏道具介绍
- orc识别 语音识别 云真机 内网穿透快速调研
- C++练习实例———控制台实现坦克大战小游戏
- 冬瓜哥原创装b文 :《觉醒》
- Cluster 集群