背景
项目架构原来是App通过soap传输数据,由于部分数据是动态变化的,所以需要定时轮询是否有新的数据。由于更新的数据本身大小不是很大,考虑使用消息推送的方式来更新数据。
技术选型
mq可以供选择的方案很多,选型的标准为可以在移动端快速使用,跨平台(App现在有Android和IOS两个版本),可以在复杂网络环境使用。mqtt完全满足上面的需求,首先mqtt是由IBM牵头制定,设计目标是帮助嵌入式设备快速稳定的进行数据传输,协议本身是开源的,基于tcp协议构建。并且有大量的开源服务端和客户端实现,现在的mqtt属于eclipse基金会。在mqtt的github页面有相关的实现连接,链接: https://github.com/mqtt/mqtt.github.io/wiki/software?id=software
服务端选型
服务端可供选择的实现:https://github.com/mqtt/mqtt.github.io/wiki/servers
简单说一下各个实现的优势和劣势(只说明了试用过的,其它的请自行测试):
1.WebsphereMQ
mqtt协议本身是由IBM提出的,不过WebsphereMQ对于一般用户来说体量太大了,上手难度太大
2.Mosquitto
官方网站:http://mosquitto.org/ 支持的协议类型MQTT v3.1/v3.1.1。Mosquitto本身在BSD协议下开源,可以在官网下载源代码,方便自己定制,不过Mosquitto由c实现,上手难度比较大。另外Mosquitto提供了libmosquitto供客户端使用。
3.Eclipse Paho
官方网站:http://www.eclipse.org/paho/,归属于eclipse基金会,提供了一个公开的mosquitto实现,地址:iot.eclipse.org, 端口 1883。主要提供了大量的客户端实现类库(本项目Andoird客户端使用了https://www.eclipse.org/paho/clients/android/)
4.emqtt
官方网站:http://emqtt.cn/,国内大神开发的服务端,非常强悍。基于erlang开发,本身在MIT协议下开源,项目托管在https://github.com/emqtt/emqttd,协议支持到MQTT V3.1.1,支持基于HTTP Publish API and WebSocket的访问,支持集群部署,支持插件式开发。截取作者性能测试说明如下:
erlang对于普通用户来说还是难上手,如果没有定制开发的需求可以考虑使用。另外作者提供了客户端类库,包括用swift构建的IOS客户端。
5.Yunba.io
官方网站:http://yunba.io/,原极光推送的CTO张虎创建的商用平台,erlang开发,支持HTTP Publish API and WebSocket,使用了下,效果还不错,IOS的sdk对接非常简单,另外提供了各个平台的sdk,大部分是基于现有的开源类库实现的。免费用户有一定的限制,如果需要商业支持是个不错的选择。
6.Mosca
基于node.js开发的服务端实现,项目托管在https://github.com/mcollina/mosca,同时支持WebSocket访问,本身在MIT协议下开源。数据持久化支持redis和mongo,部署支持docker。二次开发非常简单,这也是最后项目选定的一个主要因素。另附某博客的对mosca说明的技术文章http://blog.shiqichan.com/introducing-mqtt/,我在开发过程中多有参考,在此表示感谢。
写在最后
其实技术选型很重要的一个原则是要选择适合自己的方案,而不是最好的方案。下篇文章会介绍在使用Mosca进行二次开发遇到的那些坑,敬请期待!