博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
http keep - alive 与 长连接
阅读量:4352 次
发布时间:2019-06-07

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

你可以把 WebSocket 看成是 HTTP 协议为了支持长连接所打的一个大补丁,它和 HTTP 有一些共性,是为了解决 HTTP 本身无法解决的某些问题而做出的一个改良设计。

在以前 HTTP 协议中所谓的 keep-alive connection 是指在一次 TCP 连接中完成多个 HTTP 请求

,但是对每个请求仍然要单独发 header;所谓的 polling 是指从客户端(一般就是浏览器)不断主动的向服务器发 HTTP 请求查询是否有新数据。

 

这两种模式有一个共同的缺点,就是除了真正的数据部分外,服务器和客户端还要大量交换 HTTP header,信息交换效率很低。

它们建立的“长连接”都是伪.长连接,只不过好处是不需要对现有的 HTTP server 和浏览器架构做修改就能实现。

 

WebSocket 解决的第一个问题是,通过第一个 HTTP request 建立了 TCP 连接之后,之后的交换数据都不需要再发 HTTP request了,使得这个长连接变成了一个真.长连接。

但是不需要发送 HTTP header就能交换数据显然和原有的 HTTP 协议是有区别的,所以它需要对服务器和客户端都进行升级才能实现。

在此基础上 WebSocket 还是一个双通道的连接,在同一个 TCP 连接上既可以发也可以收信息。

 

此外还有 multiplexing 功能,几个不同的 URI 可以复用同一个 WebSocket 连接。这些都是原来的 HTTP 不能做到的。

 

 

 

Not reliable(不可靠)

HTTP是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive没能改变这个结果。
 
另外,Keep-Alive也不能保证客户端和服务器之间的连接一定是活跃的,在HTTP1.1版本中也如此。
 
唯一能保证的就是当连接被关闭时你能得到一个通知,所以不应该让程序依赖于Keep-Alive的保持连接特性,否则会有意想不到的后果
 
 
keep-alive确实很高效,节约了大量时间,但是它并不是没有缺点的。
 
我们都知道一个操作系统的能支撑的连接数是有限的,使用
ulimit命令可以查看当前系统的最大连接数。

转载于:https://www.cnblogs.com/dhsz/p/6566528.html

你可能感兴趣的文章
Java读写文件的几种方法
查看>>
svn 未提交的显示黑色的星*
查看>>
如何解决linux下apache启动时httpd: apr_sockaddr_info_get() failed for 报错
查看>>
Chrome自带恐龙小游戏的源码研究(七)
查看>>
大话Android中的Handler机制
查看>>
西电网络攻防大赛--渗透测试第二题
查看>>
IdentityServer4源码颁发token分析及性能优化
查看>>
python学习点滴记录-Day19
查看>>
实验二
查看>>
Extjs MVC开发模式详解
查看>>
点击输入框,标题上移
查看>>
SQL常用语句之数据库中表的创建、删除以及属性的修改-篇幅3
查看>>
SDN学习笔记
查看>>
最长公共子序列(模版)
查看>>
C++重要题目一
查看>>
洛谷 P1832 A+B Problem(再升级)
查看>>
洛谷 U10206 Cx的治疗
查看>>
前端切图:自制简易音乐播放器
查看>>
前端,Java,产品经理,微信小程序,Python等资源合集大放送
查看>>
官方文档
查看>>