WebSocket 是什么原理?为什么可以实现持久连接

WebSocket通过首个HTTP请求建立TCP连接后,后续数据交换不再发送HTTP请求,实现真·长连接。此连接为双向通道,支持多路复用,提高了数据交换效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebSocket 是什么原理?为什么可以实现持久连接
https://www.zhihu.com/question/20215561
链接:https://www.zhihu.com/question/20215561/answer/40316953
其实我们所用的程序是要经过两层代理的,即HTTP协议在Nginx等服务器的解析下,然后再传送给相应的Handler(PHP等)来处理。
简单地说,我们有一个非常快速的接线员(Nginx),他负责把问题转交给相应的客服(Handler)。
本身接线员基本上速度是足够的,但是每次都卡在客服(Handler)了,老有客服处理速度太慢。,导致客服不够。
Websocket就解决了这样一个难题,建立后,可以直接跟接线员建立持久连接,有信息的时候客服想办法通知接线员,然后接线员在统一转交给客户。
这样就可以解决客服处理速度过慢的问题了。

同时,在传统的方式上,要不断的建立,关闭HTTP协议,由于HTTP是非状态性的,每次都要重新传输identity info(鉴别信息),来告诉服务端你是谁。
虽然接线员很快速,但是每次都要听这么一堆,效率也会有所下降的,同时还得不断把这些信息转交给客服,不但浪费客服的处理时间,而且还会在网路传输中消耗过多的流量/时间。
但是Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求,这样就解决了接线员要反复解析HTTP协议,还要查看identity info的信息。
同时由客户主动询问,转换为服务器(推送)有信息的时候就发送(当然客户端还是等主动发送信息过来的。。),没有信息的时候就交给接线员(Nginx),不需要占用本身速度就慢的客服(Handler)了

http://www.cnblogs.com/wangcp-2014/p/5169971.html

你可以把 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 连接往往要经过无数的路由,防火墙。你以为你的数据是在一个“连接”中发送的,实际上它要跨越千山万水,经过无数次转发,过滤,才能最终抵达终点。在这过程中,中间节点的处理方法很可能会让你意想不到。

<think>嗯,用户想了解WebSocket服务器的概念和它的工作原理,需要一个形象化的理解。首先,我需要回顾一下WebSocket的基础知识。传统上,HTTP协议是无状态的,每次请求都需要重新建立连接,这在实时应用中效率不高。WebSocket的出现解决了这个问题,它允许在客户端和服务器之间建立一个持久化的全双工通信通道。 那WebSocket服务器到底是什么呢?简单来说,它应该是一个能够处理WebSocket协议的服务器,能够维持长连接,实时地发送和接收数据。用户可能需要知道它和普通HTTP服务器的区别,比如如何处理握手过程,如何管理连接状态,以及数据传输的方式。 接下来,形象化的理解部分可能需要比喻。比如,把HTTP比作打电话,每次通话后挂断,而WebSocket就像对讲机,保持一直在线,随时可以通话。这样用户更容易理解两者的差异。 工作原理方面,需要分步骤说明。首先是握手阶段,客户端通过HTTP Upgrade请求升级协议,服务器响应确认,之后连接就保持打开状态。数据帧的传输可能涉及掩码处理,确保安全。这些技术细节需要简化,用通俗的语言解释。 用户可能还关心WebSocket的应用场景,比如在线聊天、实时游戏等,这些例子可以帮助他们理解为什么需要WebSocket服务器。此外,提到的引用内容里有握手请求的例子和客户端连接的代码,可以结合这些引用内容来增强回答的可靠性。 需要注意回答的结构,先定义WebSocket服务器,再解释工作原理,结合比喻和步骤,最后举例应用场景。同时,要确保使用正确的中文表达,避免技术术语过于复杂,让用户容易理解。最后生成的相关问题要围绕服务器实现、协议细节和应用场景展开,帮助用户深入探索。</think>### WebSocket 服务器的概念及工作原理 #### 1. WebSocket 服务器是什么? **WebSocket 服务器**是支持 WebSocket 协议的后端服务,用于与客户端(如浏览器)建立**持久化双向通信**的通道。与传统 HTTP 服务器的“一问一答”模式不同,WebSocket 服务器能在连接建立后主动推送数据,无需客户端频繁发起请求[^1]。 **形象化理解**: - 传统 HTTP:类似“打电话”,每次通话(请求)后挂断,下次需重新拨号。 - WebSocket:类似“对讲机”,连接后双方随时能发送消息,无需反复建立连接。 #### 2. WebSocket 工作原理的简化模型 1. **握手阶段**(HTTP 升级协议) 客户端发送特殊 HTTP 请求(含`Upgrade: websocket`头),服务器验证后返回`101 Switching Protocols`,完成协议升级[^2]。 *示例请求头*: ```http GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== ``` 2. **数据帧传输** 连接建立后,数据通过轻量级的二进制帧(Frame)传输,支持文本、二进制数据。帧格式包含掩码(客户端到服务端需掩码加密)和长度标识。 3. **连接保持与主动推送** 服务器可主动向客户端推送实时数据(如股票价格、游戏状态),客户端也能随时发送请求,实现低延迟交互。 #### 3. 典型应用场景 - **实时聊天**:消息即时到达,无需刷新页面。 - **在线协作工具**:多人同时编辑文档时同步内容。 - **游戏与物联网**:实时传输玩家动作或设备传感器数据。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值