WebSocket

WebSocket

WebSocket是HTML5一种新的协议,它实现了浏览器与服务器全双工通信,能更好地节约服务器资源和带宽,并达到实时通信。它建立在TCP之上,同HTTP一样通过TCP来传输数据,但是它与HTTP最大的不同是:

  • WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/Client Agent都能主动向对方发送或者接受数据,就像Socket一样
  • WebSocket需要类似TCP的客户端和服务端通过握手连接,连接成功后才能相互通信

非WebSocket模式传统HTTP客户端与服务器的交互如下图所示:

img

使用WebSocket模式客户端与服务器的交互如下图所示:

img

一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端断掉连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大节约了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显

缺陷与反思

传统的REST服务器,基本上可以认为提供的是无状态服务,无状态服务的优点是很好水平扩展,服务器压力大了增加一台机器就行,负载会自动在每台机器上均衡

但是WebSocket想进行水平扩展就很复杂,因为WebSocket的场景一般是双向通信,当数据库发生变更了,此时需要向客户端推送数据,要推送数据,就必须知道和当前客户端建立WebSocket的机器是哪一个,然后向这台机器上的服务发送通知。所以一个多台机器的WebSocket服务,必须要搭配一个消息定阅服务