顺晟科技
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上的推送消息示例
你要是有你自己的遥测传输服务器,请替换成您自己的,比如消息中间件服务器。
11
2022-12
17
2022-03
18
2021-11
19
2021-06
16
2021-06
16
2021-06