WebSocket的初始与基本使用

为什么要用WebSocket?

为什么我们有了http请求之后,还要用WebSocket呢?

http只能是单向发起的,只能由客户端主动发起,服务端被动响应。服务端无法主动向客户端发送消息,如果想实现类似于聊天室这种即时通讯的功能,就需要使用消息轮询。轮询的效率低,比较消耗资源。(每次建立http连接都进行三次握手,并且每次请求都需要携带请求头),开发人员为了解决这个问题,发明了webSocket

一、什么是WebSocket?

WebSocket是HTML5规范提出的一种协议。

它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

二、WebSocket使用

1.建立链接

wx.connectSocket({
  url: 'wss://example.qq.com',
  header:{
    'content-type': 'application/json'
  },
  protocols: ['protocol1']
})

创建一个 WebSocket 连接。

 

 

2.链接回调

wx.onSocketOpen(res=>{
    conlose.log(res)
})

 负责监听 WebSocket 连接打开事件。

3.发送信息

let socketOpen = false
let socketMsgQueue = []
wx.connectSocket({
  url: 'test.php'
})

wx.onSocketOpen(function(res) {
  socketOpen = true
  for (let i = 0; i < socketMsgQueue.length; i++){
    sendSocketMessage(socketMsgQueue[i])
  }
  socketMsgQueue = []
})

function sendSocketMessage(msg) {
  if (socketOpen) {
    wx.sendSocketMessage({
      data:msg
    })
  } else {
    socketMsgQueue.push(msg)
  }
}

通过 WebSocket 连接发送数据。需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送。 

4.关闭链接

wx.connectSocket({
  url: 'test.php'
})

//注意这里有时序问题,
//如果 wx.connectSocket 还没回调 wx.onSocketOpen,而先调用 wx.closeSocket,那么就做不到关闭 WebSocket 的目的。
//必须在 WebSocket 打开期间调用 wx.closeSocket 才能关闭。
wx.onSocketOpen(function() {
  wx.closeSocket()
})

wx.onSocketClose(function(res) {
  console.log('WebSocket 已关闭!')
})

 5.关闭链接监听

wx.onSocketClose(res=>{
    conlose.log(res)
})
//参数
//code	number	一个数字值表示关闭连接的状态号,表示连接被关闭的原因。
//reason	string	一个可读的字符串,表示连接被关闭的原因。

Supongo que te gusta

Origin blog.csdn.net/weixin_53583255/article/details/127504361
Recomendado
Clasificación