webSocket 介绍

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。
而HTML5 定义的 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
- 看过一个很有趣的形容:

轮询就是:

前台:后台你好了没有?(3秒后。。。)
 后台:没有。
 前台:后台你好了没有?(3秒后。。。)
 后台:没有。
 前台:后台你好了没有?(3秒后。。。)
 后台:好了。。

websocket就是:

前台:后台你好,我来拿水果了!
后台:给你苹果。(1秒后。。)
后台:给你梨子。(10秒后。。)
后台:给你香蕉,我没水果了。
前台:好了,我走了!

如何使用 webSocket

  • 建立websocket
    实现效果:点击按钮建立连接,页面关闭时关闭连接。
  • 代码如下:
// 建立连接
initSocket() {
  // 相当于 let url = 'ws://192.168.10.18:9529/websocket/admin' admin 为参数,建立客户端与服务器之间的关系
  let baseURL = `${ Axios.defaults.baseURL }/websocket`.replace("http","ws")
  let url = `${baseURL}/${this.username}` 
      
  this.webSocket = new WebSocket(url)
  this.webSocket.onopen = this.webSocketOnOpen
  this.webSocket.onclose = this.webSocketOnClose
  this.webSocket.onmessage = this.webSocketOnMessage
  this.webSocket.onerror = this.webSocketOnError

},
// 建立连接成功后的状态
webSocketOnOpen() {
  console.log('websocket连接成功');
},
// 获取到后台消息的事件,操作数据的代码在onmessage中书写
webSocketOnMessage(res) {
  // res就是后台实时传过来的数据
  console.log(res);
    //给后台发送数据
  this.webSocket.send("发送数据");
},
// 关闭连接
webSocketOnClose() {
  console.log('websocket连接已关闭');
},
//连接失败的事件
webSocketOnError(res) {
  console.log('websocket连接失败');
  // 打印失败的数据
  console.log(res);
}

谨记:在生命周期结束的时候关闭websocket连接,除非业务需要可以不关,不然很耗内存。

created() {
  // 页面打开就建立连接,根据业务需要
  this.initSocket()
},
destroyed() {
  // 页面销毁关闭连接
  this.webSocket.close()
},