# websoket

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 可以在浏览器和服务器之间建立实时的双向通信,相比传统的 HTTP,有更低的延迟和更高的效率。

WebSocket 在建立连接时,需要进行握手协议,握手过程的 header 信息显示 WebSocket 支持的协议。客户端请求建立 WebSocket 连接时,请求头部包含了 Upgrade 和 Connection,服务器端返回的头部信息中也包含了 Upgrade 和 Connection。

客户端和服务器端使用一致的 WebSocket 生命周期管理,通信效率高,性能优越,操作简单。

# WebSocket 在小程序中的应用

在小程序开发中,可以利用微信开发者工具提供的模拟 websocket 功能完成初步的开发,同时在实际项目中需要使用到后端接口的支持,可以使用 Springboot 及 WebSocket 包括STOMP的技术。

使用微信小程序中的 WebSocket,在前端中通过JS提供的 WebSocket 接口来建立 WebSocket 连接,并通过 WebSocket 接口提供的方法向服务器发送消息或者接收服务器下发的消息。使用 WebSocket 接口发送消息时,调用 send() 方法,使用 onmessage() 方法接收消息。

# 代码演示

import { webSocket } from 'm-miniCommonSDK/index'
//连接websocket
function initWebsocket() {
  return new Promise((resolve, reject) => {
    let params = {
      src_token: 1000,
      token: token,
      appId: appid,
      req: getReqId(),
      device_id: device_id,
      reset: 0,
      offset: 0,
      client_type: 'ios',
    }
    const url = url,
    gloabalWebSocket = new webSocket({
      heartCheck: true,
      isReconnection: true,
      initWebSocketObj: {
        url: url,
        success(res) {
          console.log(res, 'initWebSocket res success')
          resolve(res)
        },
        fail(err) {
          reject(err)
          console.log(err, 'initWebSocket res fail')
        },
      },
    })
  })
}

//获取设备推送信息
function receiveSocketMessage(callback) {
  return new Promise((resolve) => {
    gloabalWebSocket &&
      gloabalWebSocket.onReceivedMsg((result) => {
        resolve(result)
        callback(result)
      })
  })
}

//关闭websoket连接
function closeWebsocket() {
  gloabalWebSocket && gloabalWebSocket.closeWebSocket()
}