1 什么是长连接和短连接

 
 
 

三次握手和四次挥手

 
TCP区别于UDP最重要的特点是TCP必须建立在可靠的连接之上,连接的建立和释放就是握手和挥手的过程。
三次握手为连接的建立过程,握手失败则连接建立失败。
四次挥手为连接的完整释放过程,也会发生某个消息丢失或者超时的情况,有一方主动发送FIN消息即表示连接即将释放。
注:SYN、ACK、FIN消息具有哪些含义,以及连接的状态,请参考《TCP/IP详解 卷1》第18章。
 

长连接

 
长连接,也叫持久连接,在TCP层握手成功后,不立即断开连接,并在此连接的基础上进行多次消息(包括心跳)交互,直至连接的任意一方(客户端OR服务端)主动断开连接,此过程称为一次完整的长连接。HTTP 1.1相对于1.0最重要的新特性就是引入了长连接。
 

短连接

 
短连接,顾名思义,与长连接的区别就是,客户端收到服务端的响应后,立刻发送FIN消息,主动释放连接。也有服务端主动断连的情况,凡是在一次消息交互(发请求-收响应)之后立刻断开连接的情况都称为短连接。
注:短连接是建立在TCP协议上的,有完整的握手挥手流程,区别于UDP协议。
 

2 如何快速区分当前连接使用的是长连接还是短连接

 
1、凡是在一次完整的消息交互(发请求-收响应)之后,立刻断开连接(有一方发送FIN消息)的情况都称为短连接
2、长连接的一个明显特征是会有心跳消息(也有没有心跳的情况),且一般心跳间隔都在30S或者1MIN左右,用wireshark抓包可以看到有规律的心跳消息交互(可能会存在毫秒级别的误差)。
 

3 什么时候用长连接,短连接?

 
1、需要频繁交互的场景使用长连接,如即时通信工具(微信/QQ,QQ也有UDP),相反则使用短连接,比如普通的web网站,只有当浏览器发起请求时才会建立连接,服务器返回相应后,连接立即断开。
2、维持长连接会有一定的系统开销,用户量少不容易看出系统瓶颈,一旦用户量上去了,就很有可能把服务器资源(内存/CPU/网卡)耗尽,所以使用需谨慎。
 
 
转载:
http://jgsj.iteye.com/blog/2050436

最新文章

  1. 连接SQLServer时,因启用连接池导致孤立事务的原因分析和解决办法
  2. Qt之C语言有符号数与无符号数运算
  3. SQL中跨服务器查询
  4. 使用JS脚本获取url中的参数
  5. 时事新闻之 谷歌 google 发布Tensor Flow 源代码
  6. Android 使用AIDL调用外部服务
  7. Spring使用Cache、整合Ehcache
  8. C++空类以及没有成员变量的类的大小
  9. 为ubuntu只带的network-manager添加latp/ipsec VPN
  10. 【Objective-C】4-空指针和野指针
  11. 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序(Oledb)
  12. spring AOP简单入门
  13. Python之美[从菜鸟到高手]--urlparse源码分析
  14. UrlRewriter配置IIS支持伪静态
  15. Kafka leader副本选举与消息丢失场景讨论
  16. python 数据分类汇总
  17. 一些JavaScript基本函数
  18. 如何bitbucket上删除项目
  19. linux arm的存储分布那些事之一【转】
  20. 2017软工第十周个人PSP

热门文章

  1. 数据库设计中的Soft Delete模式
  2. IOC的理解
  3. IOS要用到的东西
  4. 2014-10-28——iframe多层嵌套时获取元素总结
  5. vim配色方案设置(更换vim配色方案)
  6. django初始
  7. phpcms模板标签整理
  8. For xml path
  9. android screenOrientation
  10. php xss过滤
  11. 关于vue的使用计算属性VS使用计算方法的问题
  12. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习3
  13. Java多线程(三)如何创建线程
  14. NOI Day1线上同步赛梦游记
  15. nowcoder 206A - Birthday - [最小费用最大流]
  16. Linux下使用Quagga(Zebra)搭建路由器记录(转)
  17. C++进阶--静态多态
  18. 移植openssh到arm linux
  19. 动态规划-Largest Sum of Averages
  20. Hive—简单窗口分析函数