WebSocket

目录

 

why

请求-应答的缺点

轮询的缺点

websocket特点

websocket帧结构


"WebSocket"是一种基于TCP的轻量级网络通信协议,在地位上与HTTP“平级”的

why

"WebSocket"与HTTP/2一样,都是为了解决HTTP某方面的缺陷而诞生的。

  • HTTP/2针对的是“队头阻塞”

  • WebSocket针对的是“请求-应答”的通信模式

请求-应答的缺点

“请求-应答”是一种“半双工”的通信模式,虽然可以双向收发数据,但同一时刻只能一个方向上有动作,传输效率低。而且,它是一种“被动”通信模式,服务器只能“被动”的响应客户端的请求,无法主动向客户端发送数据。

虽然HTTP/2、HTTP/3新增了Stream、Server Push等特性,但“请求-应答”依然是主要的工作方式。这就导致了HTTP难以应用在动态页面、即时消息、网络游戏等要求“实时通信”的领域

在WebSocket出现之前,在浏览器环境里用JavaScript实时开发Web应用很麻烦。因为浏览器是一个“受限的沙盒”,不能用TCP,只有HTTP协议可用,所以就出现了很多“变通”的技术,“轮询(polling)”就是比较常用的一种。

简单地说,轮询就是不听地向服务器发送HTTP请求,问有没有数据,有数据的话服务器就响应报文回应。如果轮询地频率比较高,那么就可以近似的实现“实时通信”地效果。

轮询的缺点

  • 反复发送无效查询请求消耗大量的带宽和CPU资源

websocket特点

真正的“全双工”的通信协议,与TCP一样,客户端和服务端可以随时向对方发送数据。一旦后台有了新的数据,就可以立即“推送”给客户端,不需要客户端轮询,“实时通信”的效率也提高了。

websocket采用了二进制帧结构,语法、语义与HTTP完全不兼容,但因为它的主要运行环境是浏览器,为了便于推广和应用,就需要向“HTTP”靠拢,这就是名字的“web”含义

websocket沿用了HTTP的URI格式,但开头的协议不是“HTTP”,引入了两个新的名字:“WS”和“WSS”,分别标识明文和加密的websocket协议

端口号:80和443

ws://www.chrono.com
ws://www.chrono.com:8080/srv
wss://www.chrono.com:445/im?user_id=xxx

websocket帧结构

二进制帧,和HTTP/2、HTTP/3的关注点不同

  • websocket更侧重于“实时通信

  • HTTP/2更侧重于传输效率

WebSocket