WebSocket和Keep-Alive有何不同?
你可以把 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 不能做到的。
另外说一点技术细节,因为看到有人提问 WebSocket 可能进入某种半死不活的状态。这实际上也是原有网络世界的一些缺陷性设计。上面所说的 WebSocket 真.长连接虽然解决了服务器和客户端两边的问题,但坑爹的是网络应用除了服务器和客户端之外,另一个巨大的存在是中间的网络链路。一个 HTTP/WebSocket 连接往往要经过无数的路由,防火墙。你以为你的数据是在一个“连接”中发送的,实际上它要跨越千山万水,经过无数次转发,过滤,才能最终抵达终点。在这过程中,中间节点的处理方法很可能会让你意想不到。
比如说,这些坑爹的中间节点可能会认为一份连接在一段时间内没有数据发送就等于失效,它们会自作主张的切断这些连接。在这种情况下,不论服务器还是客户端都不会收到任何提示,它们只会一厢情愿的以为彼此间的红线还在,徒劳地一边又一边地发送抵达不了彼岸的信息。而计算机网络协议栈的实现中又会有一层套一层的缓存,除非填满这些缓存,你的程序根本不会发现任何错误。这样,本来一个美好的 WebSocket 长连接,就可能在毫不知情的情况下进入了半死不活状态。
而解决方案,WebSocket 的设计者们也早已想过。就是让服务器和客户端能够发送 Ping/Pong Frame(RFC 6455 - The WebSocket Protocol**)。这种 Frame 是一种特殊的数据包,它只包含一些元数据而不需要真正的 Data Payload,可以在不影响 Application 的情况下维持住中间网络的连接状态。
推荐阅读
-
C++ Basic 面试问题 | C++ 中的野生指针和悬空指针有何区别?
-
[科普]PyTorch 和 Tensorflow 分别是什么?两者有何异同?-张量流
-
都是JS混淆加密工具,UglifyJS 和JShaman相比有什么不同?
-
最值得投资的服务O2O公司TOP10- http://www.chinaz.com/start/2014/1010/370056.shtml 创哥说:自2013年下半年开始,本地生活服务业里出现了众多O2O模式的创业公司。这是资本和舆论密切关注的热点,它们大多相信自己就是那个能改造本地生活服务业的人,资本和舆论差不多也这么想,所以它们创立没多久,就纷纷拿到了天使投资。现在大半年过去,它们要融A轮甚至B轮了。那么,哪些公司的发展前景更值得期待? 《创业家》跟踪了这波浪潮,并对其中的代表公司进行了深度采写。此外,《创业家》还通过微信群和“重度垂直-黑马O2O特训营”、线下沙龙等服务聚集起了中国最领先的O2O创业公司创始人,请加微信号korchagin,加群请注明姓名+公司名+职位,否则初审都不会过。 《创业家》采访了近10位投资人和大约30家从事本地生活服务的创业公司,试图找到每个细分行业里最优秀的早期公司。我们的评判标准与VC投早期项目时类似,主要看行业前景、团队结构、商业思路这三个维度。为了加强专业度和调查力度,我们还请投资人和业内公司作了互相评价。 有的人可能会想:我作为同行,明明三项指标都比上榜的公司好,为啥我榜上无名?因为很多概念,拆细了看才有价值。比如“行业前景”,创业者第一步切入的细分市场的规模与它所能延伸出的想象空间,其实是两回事。出行市场广阔无边,滴滴打车和易到用车虽然正在商务租车领域展开竞争,但它们最早切入的细分领域不同,所以发展节奏和今日的市值也就不同。又比如,二次创业者要比初次创业者有优势,因为阅历很值钱。但如果前者第一次创业时实现了财务*,那他二次创业时很可能饥饿感不够,这可能会抵销掉他的阅历优势。 NO.
-
理解 C# 中的 Linq、where 和 FindAll:有何不同?
-
LNMP和LAMP有何不同?哪个更适合安装?
-
LNMP和LAMP有什么不同?
-
Java中的取余和取模有何不同以及如何运算
-
增量模型和迭代模型有何不同?
-
增量模型和迭代模型有何不同?