小程序支持 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
版权声明: 本文为 InfoQ 作者【风翱】的原创文章。
原文链接:【http://xie.infoq.cn/article/01d3dc1d5e539ccb1767ca60c】。文章转载请联系作者。
评论