背景
項目架構原來是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進行二次開發遇到的那些坑,敬請期待!