18910140161

如何在微信小程序的websocket上使用mqtt协议

顺晟科技

2021-06-16 10:52:16

495

由于搜狗公司兄弟团队的一个微信小程序要跑遥测传输协议,我研究了下,结果如下:

一、打包出一个可以运行在微信小程序里的my_mqtt.js客户端库

步:

参考此库官方说明:https://github。请访问www . analog.com/mqttjs/MQTT。js # browserify

NPM安装-g网络包//安装网络包

激光唱片节点模块/mqtt(_ m)

新公共管理安装。//安装开发依赖项

web pack mqtt.js。/my _ mqtt。js-输出-库-目标公共js 2

第二步:

将生成的my_mqtt.js文件里所有的:

(function(){ return this;}())

替换为:

窗户

第三步:

在my_mqtt.js文件顶部加上代码:

var setImmediate=setTimeout

var clear immediate=清除超时;

var socketOpen=false

var socketMsgQueue=[]

函数发送套接字消息(消息){

console.log('send msg: ',消息类型)

控制台。日志(msg);

if (socketOpen) {

wx.sendSocketMessage({

数据:消息

})

} else {

socketMsgQueue.push(msg)

}

}

var document={

URL: ' '

}

var window={

setTimeout: setTimeout,

clearTimeout: clearTimeout,

WebSocket:函数(url) {

console.log('调用窗口WebSocket ',参数)

var ws={

send:发送套接字消息,

close: wx.closeSocket,

onopen: null,

onmessage: null,

onclose: null,

onerror: null

}

wx.connectSocket({ url: url })

wx.onSocketOpen(函数(res) {

console.log('收到onopen事件' : ',参数)

socketOpen=真

for(var I=0;i socketMsgQueue.lengthi ) {

发送套接字消息(套接字消息队列[i])

}

socketMsgQueue=[]

ws.onopen ws.onopen.apply(ws,参数)

})

wx.onSocketMessage(函数(res) {

console.log('收到接收消息事件' : ',参数)

console.log(res.data)

ws。在消息ws上。收到消息。应用(ws,参数)

})

wx。onscocketclose(function(){

console.log('收到事件事件' : ',参数)

ws.onclose ws.onclose.apply(ws,参数)

})

wx。onscocketerror(function(){

console.log('收到错误时触发事件' : ',参数)

ws.onerror ws.onerror.apply(ws,参数)

})

返回ws;

}

}

二、微信小程序里调用my_mqtt.js

var mqtt=require('././utils/my_mqtt.js ')

var client=mqtt。connect(' WSS ://workyun。com/mqtt ')

client.subscribe('mqtt/demo ')

client.on('message ',function (topic,payload) {

控制台。日志([主题,有效负载]。连接(' : ')

客户端()

})

client.publish('mqtt/demo ','你好,workyun.com!)

三、用服务器处理微信小程序的求转发到不支持超文本传送协议头:秒-网络套接字-协议问题

nginx.conf:

位置/mqtt {

proxy _通过http://测试。莫斯科托。org :8080

代理重定向(_ r)关闭;

代理主机测试。莫斯奇托。org :8080

代理集头秒-网络套接字-协议;

网络套接字协议;

proxy _ http _ version 1.1

proxy _ set _ header Upgrade $ http _ Upgrade;

代理集头连接"升级";

}

http://测试。清真寺。org http://。800006是mqttjs官方给搭建的一个遥测传输协议测试服务器,参见:Websocket上的推送消息示例

你要是有你自己的遥测传输服务器,请替换成您自己的,比如消息中间件服务器。

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航