mqtt推送实践

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

    mqtt既然是一个协议,自然就有它的实现了,相关的客户端和服务器端实现可以在这个网址下找到:https://github.com/mqtt/mqtt.github.io/wiki/software?id=software,这里服务器端实现我选择了mosquitto,客户端嘛就不止选择一个了,由于项目涉及到Android、ios以及mtk平台以及浏览器,因此每个平台客户端的选择也不一样。

  1. Android端和服务器端由于采用了java进行开发,所以选择了https://github.com/fusesource/mqtt-client。
  2. ios平台不怎么熟悉,同事弄的,选择的:https://github.com/wssand44/MQTT/tree/master/Client/MQTTMessenger/MQTTMessenger/MqttSDK。
  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的连接方式,不过这到不影响我们对库的选择,http://test.mosquitto.org/ws.html该页面下提供了一个公共的服务器地址可以让我们测试,查看它的js源码得知,他使用的端口是8080,并且他使用的js库也不是的前面说的库,这个自然不要紧了,只要是基于mqtt协议的实现,理论上都是能连接上mqtt服务器的,刚开始我写1883没有连接上...,所以成功连接上了,开心啊,这样的话,基本上就证明使用mosquitto也能搞定网页版的mqtt推送了,网页内容实时显示指日可待。

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

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

  1. # 桥接客户端的用户名
  2. username root

你可能感兴趣的:(web开发)