WebSocket

WebSocket 是一种在Web应用程序中实现全双工通信的协议,建立在HTTP协议之上。

初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?

答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。

举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用“轮询”:每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。

轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。

WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。

参考:

W3Cschool:JavaScript WebSocket

How To Use WebSocket In Javascript With Examples

How To Use Python To Create WebSocket Server & Client Example

博客园-雷雨天的雷胖子:js中WebSocket

优点

其他特点包括:

  1. 建立在 HTTP(TCP) 协议之上,默认端口80和443,握手阶段 HTTP 协议,服务器端的实现比较容易。
  2. 相比传统的HTTP请求-响应模式,WS协议可以在同一个连接上进行双向通信,避免了频繁的连接建立和断开的开销,同时减少了通信的延迟。
  3. 可以发送文本,也可以发送二进制数据。
  4. 没有同源限制,客户端可以与任意服务器通信,完全可以取代 Ajax。
  5. 协议标识符是ws(如果tls加密,则为wss,对应 HTTPS 协议),服务器网址就是 URL。