以前做小程序为了应急找了个插件去链接WebSokcet,文章传送门。
回过头在新项目中再次使用时出现了些许问题,不一一赘述。遂决定好好用一下原生的WebSokcet。
一、说明
1.小程序原生的WebSokcet没有断线重连机制,这个是他的不足之处。
2.小程序新的版本库已经支持存在多个 WebSokcet 连接。
官方说明:基础库 1.7.0 之前,一个微信小程序同时只能有一个 WebSocket 连接,如果当前已存在一个 WebSocket 连接,会自动关闭该连接,并重新创建一个 WebSocket 连接。基础库版本 1.7.0 及以后,支持存在多个 WebSokcet 连接,每次成功调用 wx.connectSocket 会返回一个新的 SocketTask。
二、实际例子:
首先你需要socket地址url: let url = 'wss://xxx.xxx.com/?xxx=xxx'
注意:1.小程序管理后台添加socket域名的时候不能出现端口;2.如果使用了appID,协议必须是 wss;3.socket服务端映射的端口仅支持 80 和 443,和公众号一个尿性。
接下来放例子:
1、socket.js
const app = getApp();
let url = 'wss://xxx.xxx.com/?xxx=xxx'
export const connect = function (cb) { // 定义一个方法
wx.connectSocket({ // 创建一个 WebSocket 连接
url: url,
fail (err) {
if (err) {
console.log('%cWebSocket连接失败', 'color:red', err)
app.globalData.socketConnectFail = true // 定义一个全局变量,当链接失败时改变变量的值
}
}
})
wx.onSocketOpen(function (res) { // 监听WebSocket连接打开事件。
console.log('WebSocket打开成功');
wx.sendSocketMessage({ // 通过 WebSocket 连接发送数据,需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送。
data: Buffer2Base64(), // 用于订阅的参数,视具体情况而定
success (data) {
console.log('WebSocket发送消息:', data.errMsg)