目錄
-
說明
-
功能
-
如何使用
-
參考幫助
重要的放前面:V1.0版本是一個非常基礎的版本,除了完整的MQTT協定實作外,其他功能什麼都沒做。
MQTT 協定是 IBM 開發的即時通訊協定,相對于 IM 的實際上的準标準協定 XMPP 來說,MQTT 更小,更快,更輕量。MQTT 适合于任何計算能力有限,工作在低帶寬、不可靠的網絡中的裝置,包括手機,傳感器等等。
開發此用戶端的目的,是因為實際項目中需要用到推送、即時通訊的内容,而第三方平台有時候不穩定,遇到問題難于調試。是以決定自己開發一套即時通訊系統。選用 MQTT 的原因正如上所說,它比XMPP更适合手機端使用。具體比較請參看:Android推送方案分析(MQTT/XMPP/GCM)。
項目斷斷續續寫了快一年(2015年2月~12月),大部分在業餘時間完成。代碼中的每個函數都有明确的中文注釋資訊,對于 MQTT 實作的部分,更是細節到每個功能對應的文檔的頁數都進行了标明。此伺服器既可以針對具體項目二次開發使用,也可以用于 MQTT 協定的學習。
已實作:
- 網絡傳輸功能(使用 Java7 才開始支援的 AIO 實作)~~
- 會話管理功能
- 任務排程架構(使用Quartz架構為基礎封裝)
- 協定層與網絡層的分離(即換套協定,網絡層一點不用改,也能用)
- MQTT完整實作(推送,單聊,群聊)
未實作:
- 安全層(消息加密、解密、防重放,防中間人等等)
- 好友功能(添加好友,删除好友,好友清單等等)
- 群組管理功能(添加群組,退出群組等等)
- 語音
- 視訊
- 總之就是可以拓展的應用層都沒做
所有還沒做的都是我之後想要更新的
zer0MqttServer 的使用很簡單:
- 下載下傳源碼(源碼中包括所有依賴包)
- 檢查 Java 版本是否為1.7或以上,不是則按照 Java 1.7及以上
- 導入IDE
- 引用依賴包
- 運作包 com.syxy.server 下的 StartServer 檔案,即可啟動伺服器。
測試方法也同樣簡單:
運作包 test 下的 MQTTClientTest 檔案,即可開啟測試用戶端。
測試用戶端包括的功能有:連接配接伺服器、訂閱主題、發送固定資訊,用戶端通過 pahoMqtt 第三方jar包編寫,你可以自行修改代碼進行更詳細的測試
下面簡述一下項目的目錄結構:
com.syxy.util 包中是一些公共類,包括緩沖池BufferPool、任務排程架構QuartzManager、字元串處理類StringTool、日期時間類TimeUtils等等
com.syxy.Aiohandler 是 AIO 的具體實作,包含了 IO 建立、資料接收、資料回寫3個類。
com.syxy.server 是網絡應用層,StartServer 用于啟動伺服器,并初始化協定相關的類。TcpServer 初始化了伺服器的初始資源,包括緩沖區大小,協定處理器,端口配置,AIO 等等。ClientSession 是會話管理類,每個用戶端的連接配接對應一個此類對象,包含心跳處理,會話斷開,資料接收,處理,回寫等等内容。
com.syxy.protocol 定義了協定處理接口
com.syxy.protocol.mqttImp 則是具體的 MQTT 協定的處理。包括協定的編碼,解碼,業務處理等等。其中的 message 包中處理了14種 MQTT 對應的消息類型(編碼、解碼)。process 包中進行了協定的具體處理。最重要的是
ProtocolProcess.java
檔案,其中完整實作了MQTT協定檔案中的具體流程。
resource 檔案中包含了一些配置檔案,其中 mqtt.properties 檔案可以針對緩沖區大小、臨時存儲檔案名、伺服器端口等資訊
- moquette開源項目
- MQTT協定V3.1.1版本
- MQTT協定V3.1版本
- Java AIO 基礎
- 聶永的部落格
源碼
最後附上源碼位址: https://github.com/zer0Black/zer0MQTTServer
在github中選擇分支 release-V1.0 即可。主幹會持續開發,不能保證可以跑通。