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更侧重于传输效率