前方:
微信小程序界面之类的,若是功能不是很复杂的话,开发起来其实仍是挺简单的,可是比较坑的是他的安全机制。首先你须要有本身的域名,你的域名须要备案,备案的话通常要20天左右,并且你本身的服务器要支持https。因此,我要腾讯云买了域名,买了服务器,备案等等搞了20多天,钱却是花了很多,这还只是第一坑。html
小程序MQTT客户端:
小程序的MQTT客户端支持使用的是paho-mqtt.js,能够在github上面找到源码,怎么使用的话能够查看源码里面包含的例子,总的来讲并非很复杂。可是弄好以后,界面以下:linux
用过MQTT的知道能够选择端口和服务器地址,还有用户名密码认证是可选的。因此我填好以后。链接错误以下:nginx
按照提示说,个人域名没有在合法域名列表中,可是我肯定是已经配置好了的,并且小程序项目也已经刷新了,仍是会提示这个错误。git
解决方法:
由于小程序是使用wss进行通讯,默认使用的是443端口,不用本身指定端口,可使用下面图片中最下方的方式进行访问。github
用过EMQ的应该知道,tcp端口为1883,ssl端口为8883,ws端口为8083,wss端口为8084,可是如今不能使用这些端口进行访问。以下所示:ubuntu
EMQ服务器搭建:小程序
EMQ服务的搭建其实并不复杂,能够参照官方文档进行安装,我使用的是Linux的通用版本,这里要注意的是SSL证书的设置,个人一个问题有提到,有兴趣的能够看看。segmentfault
要解决上面的问题,这里使用Nginx进行反向代理。Nginx的安装也不是很复杂,可是使用源码安装的话,安装以前要安装好依赖库,能够参照: ubuntu16.04 nginx安装。另外,还要添加一个 more_clear_headers 模块,能够参照:openresty/headers-more-nginx-module微信小程序
接下来是Nginx的配置,主要配置SSL和反向代理,进行以下配置:安全
server { listen 443; server_name www.domain.com; #填写绑定证书的域名 ssl on; ssl_certificate certs/1_www.domain.com_bundle.crt; ssl_certificate_key certs/2_www.domain.com.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置 ssl_prefer_server_ciphers on; location / { root html; #站点目录 index index.html index.htm; } location = /mqtt { proxy_pass http://www.domain.com:8083; proxy_redirect off; proxy_set_header Host www.domain.com:8083; proxy_set_header Sec-WebSocket-Protocol mqtt; more_clear_headers Sec-WebSocket-Protocol; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
上面域名和证书之类的替换为你本身的域名和证书,注意证书的路径。另外,新测8084端口(wss)和8083端(ws)均可以,不过上面用8084端口时要用https。如今已经能够完成小程序MQTT客户端与EMQ服务器的通讯了。
感谢wxapp做者的交流指导。
参考:
https://github.com/tennessine...
http://emqtt.com/docs/v2/inst...
http://www.cnblogs.com/badboy...
http://www.cnblogs.com/badboy...
https://github.com/openresty/...
https://zhuanlan.zhihu.com/p/...