浅谈WebSocket协议

116 阅读2分钟

这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战 ! src=http___www.jisuxia.com_uploadfile_2020_0120_20200120013609531.jpg&refer=http___www.jisuxia.jfif

定义

WebSocket是一种在单个TCP连接上进行全双工通信的协议,使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。

在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

为什么需要WebSocket协议

因为HTTP 协议有一个缺陷:通信只能由客户端发起。

HTTP 协议是单向的,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

要想与服务端实时通信,只能通过AJAX轮询和Long Polling长轮询等开销大影响性能的方式。

而WebSocket协议服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息。

http协议与WebSocket协议对比:

image.png

WebSocket协议特点

(1)建立在 TCP 协议之上,服务器端的实现比较容易。

(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时 不容易屏蔽,能通过各种 HTTP 代理服务器。

(3)数据格式比较轻量,性能开销小,通信高效。

(4)可以发送文本,也可以发送二进制数据。

(5)没有同源限制,客户端可以与任意服务器通信。

(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

WebSocket API

  • WebSocket.onopen: 连接成功后的回调
  • WebSocket.onclose: 连接关闭后的回调
  • WebSocket.onerror: 连接失败后的回调
  • WebSocket.onmessage: 客户端接收到服务端数据的回调
  • webSocket.bufferedAmount: 未发送至服务器的二进制字节数
  • WebSocket.binaryType: 使用二进制的数据类型连接
  • WebSocket.protocol : 服务器选择的下属协议
  • WebSocket.url : WebSocket 的绝对路径
  • WebSocket.readyState: 当前连接状态,对应的四个常量

补充问题:

为什么你们项目组中使用WebSocket技术

当我们在处理页面数据自动更新的时候,在使用js不断的请求服务器,查看是否有新数据,如果有就获取到新数据,进行对页面信息的跟新,但是当页面长时间没有更新数据时,这样就会存在资源浪费的情况,所以才会使用WebSocket来解决