写点什么

小程序支持 MQTT 协议

用户头像
风翱
关注
发布于: 2021 年 04 月 14 日
小程序支持MQTT协议

因已存在的项目中,通讯使用了中间件 mosquitto,采用的是 MQTT 协议。

小程序接入的过程中,因其本身的限制,线上环境只能采用 https 和 wss 的介入方式。在这个过程中遇到了一些问题,记录一下。


环境:

1、mosquitto(mqtt 服务器)

2、Nginx

3、Jetty(Java 应用服务器)

4、haproxy


主要是利用了 Nginx 反向代理功能,配置如下:

server {

listen 443 ssl;server_name ma.minapps.com; #域名

ssl_certificate /usr/local/nginx/cert/server.pem; #(证书公钥)

ssl_certificate_key /usr/local/nginx/cert/server.key; #(证书私钥)

ssl_session_timeout 5m;ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;ssl_prefer_server_ciphers on;

charset utf-8;

access_log logs/ma/access.log;

error_log logs/ma/error.log;

location /{proxy_pass http://jetty.minapps.com; #代理到原有的 http 的地址去,格式为(http://ip:prot 或 http://域名)

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;add_header Access-Control-Allow-Origin *;#跨域访问设置

}

location /wss {

proxy_pass http://websocket.minapps.com:9001; #对应的 mqtt 服务器的地址,websocket 的端口 proxy_redirect off;

proxy_set_header Host websocket.minapps.com;

proxy_connect_timeout 300s;

proxy_send_timeout 300s;

proxy_read_timeout 300s;

proxy_set_header Sec-WebSocket-Protocol mqtt;

more_clear_headers Sec-WebSocket-Protocol;

proxy_http_version 1.1;

proxy_set_header Upgrade “websocket”;proxy_set_header Connection “upgrade”;

}

error_page 500 502 503 504 /50x.html;location = /50x.html

{root html;}

}



过程如上图:

其中 haproxy 主要配置如下:(主要是监听过来的 443 端口转发到对应的服务器上)

frontend https_frontendbind *:443mode tcpdefault_backend httpsserver

backend httpsservermode tcpbalance roundrobinstick-table type ip size 200k expire 30mstick on srcserver s1 ip:prot #对应的 Nginx 地址和端口;


因现在环境加入一层负载,采用的是 haproxy,如果为了简单起见也可以考虑去掉 haproxy。另外,因前期没有用 Nginx 代理的处理方式,Jetty 应用服务器和 mqtt 服务器实际上都已经分别支持了 https 和 wss 的协议方式。所有才会上图中看到了 http/https 和 ws/wss 的情况。

另:添加后会出现:nginx: [emerg] unknown directive “more_clear_headers” in /usr/local/nginx/conf/nginx.conf:374

解决方法详见:Nginx 新增模块 more_clear_headers 问题记录。

js 客户端测试地址:http://mitsuruog.github.io/what-mqtt/

小程序客户端库采用了:Paho.MQTT


发布于: 2021 年 04 月 14 日阅读数: 18
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
小程序支持MQTT协议