mqtt推送实践

260 阅读3分钟

文章来源:blog.csdn.net/zhou_junhua…

最近公司开发项目,用到了推送技术,这里不分析各种推送技术的优劣了,网上内容一大堆,通过查看别人的对比资料以及实践,最后选择了mqtt这个推送协议。

    mqtt既然是一个协议,自然就有它的实现了,相关的客户端和服务器端实现可以在这个网址下找到:github.com/mqtt/mqtt.g…

  1. Android端和服务器端由于采用了java进行开发,所以选择了https://github.com/fusesource/mqtt-client。
  2. ios平台不怎么熟悉,同事弄的,选择的:github.com/wssand44/MQ…
  3. mtk平台为一个嵌入式开发平台,使用c语音开发,因此选择了https://github.com/menudoproblema/libemqtt,由于c语音实现使用了linux的socket库,因此该实现如果要直接使用,可以在linux编译运行,而我们还需要针对mtk平台的socket特性进行移植,最后才能使用。
  4. 浏览器使用websocket,因此最后选择了http://www.eclipse.org/paho/clients/js/这个js库。

    推送,最核心的就是建立长连接,因此也有很多建立连接的方式,可以基于tcp,tls,wb等来建立长连接,这里比较惭愧,刚开始没有理解这里,因此在客户端编程时,只是傻乎乎的这样写:tcp://xxx.xxx.xxx:1883,却不知道这个tcp是什么意思,幸运的是在研究网页版的mqtt通信时,看到ws://xxx.xxx.xxx:8080才明白这个字段的含义,ws我想应该就是websocket的缩写了吧。既然建立连接有这么多方式,自然mqtt服务器端的实现要支持这些连接方式才行,刚开始以为mqtt服务器端的实现主要工作仅仅是管理连接和主题分发而已,其实远没有这么简单,我想支持各种连接方式也有一定的工作量吧。

    由于项目之初并没有涉及到网页版的开发,为了快速实现(要支持tls还需要别的库一起编译才行),在安装mosquitto时,就只支持了tcp的连接方式,于是这个时候开发网页版连接自己部署的mqtt服务器就不行了,主要是服务器没有支持websocket的连接方式,不过这到不影响我们对库的选择,test.mosquitto.org/ws.html该页面下…

   至于怎么样才能使mosquitto支持websocket的连接,这部分还需要研究一下,以后再补上这部分的内容。

   关于mosquitto的配置,可以参考这篇文章,我是参考这篇文章成功的完成了编译安装:blog.chinaunix.net/uid-2588506…mosquitto.conf配置文件时,里面的桥接客户端的用户名必须要使用当前登录用户的名称,由于我是root用户登录,因此该字段配置成了root才能成功启动mosquitto。

  1. # 桥接客户端的用户名\

  2. username root

\