支付宝小程序连接 EMQX时候使用的是 mqtt over websocket 直接可以使用内置的函数
支付宝小程序连接 mqtt over websocket 的时候头部一定带上: Sec-WebSocket-Protocol : 'mqtt'
下面是官方文档说明如下:https://opendocs.alipay.com/mini/api/vx19c3
my.connectSocket 支持 mqtt 协议,但是需要注意的是,若为 mqtt 协议,则需要注意在 header 参数里,加上 「 Sec-WebSocket-Protocol : 'mqtt' 」
参考代码:
my.connectSocket({ url: 'wss://hbhftgf.site/ws/', // 此 url 仅为示例,开发者可替换为自己的 URL //mqtt 协议服务需要加上这个header header : { "Sec-WebSocket-Protocol" : "mqtt" }, success: (res) => { console.log("创建 socket 连接成功" + JSON.stringify(res)); }, fail: (error) => { my.alert({ content: '创建连接失败:' + JSON.stringify(error) }); }, });
nginx配置如下:
map $http_upgrade $connection_upgrade {
default Upgrade;
'' close;
}
location /mqtt {
proxy_pass http://127.0.0.1:8083/mqtt;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_connect_timeout 60; #配置规避webSocket连接中断
proxy_read_timeout 600; #配置规避webSocket连接中断
proxy_send_timeout 600;#配置规避webSocket连接中断
##支付宝小程序一定需要下面的头部信息:Sec-WebSocket-Protocol
#可以my.connectSocket函数在程序连接的时候指定 这个头部信息
#nginx里面添加是全局的
#proxy_set_header Sec-WebSocket-Protocol 'mqtt';
}