-
HTTP中一个request只能有一个response。而且这个response也是被动的,不能主动发起
- 因此过去的服务端推送信息是通过客户端不停的轮询实现的
-
websocket是双向通信协议,提供了服务端主动推送信息的能力
- 真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求
-
Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息
- 而无状态的HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)
-
优势
- 浏览器和服务端双向通信,更强的实时性
- 服务器不再需要为每一个客户端起多个tcp连接
- 更小的包头和首部开销
- 更好的二进制支持
-
默认端口也是
80
和443
-
需要客户端(浏览器)和服务端同时支持
-
如果经过代理(例如nignx) 的话,还需要代理支持
- 代理可能在长时间无通信时会自动切断连接
- 因此WS为了保证连接不被断掉,需要发送心跳包
- 代理可能把WS连接握手当做一个不认识的 HTTP 请求从而拒绝掉
- 有些代理会修改,去掉一些HTTP头部
- 代理可能在长时间无通信时会自动切断连接
WebSocket协议
最新推荐文章于 2023-01-08 21:51:41 发布