天天看點

【開源】MQTT推送伺服器——zer0MqttServer(Java編寫)

目錄

  • 說明

  • 功能

  • 如何使用

  • 參考幫助

重要的放前面: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 檔案,即可啟動伺服器。
【開源】MQTT推送伺服器——zer0MqttServer(Java編寫)

測試方法也同樣簡單:

運作包 test 下的 MQTTClientTest 檔案,即可開啟測試用戶端。

測試用戶端包括的功能有:連接配接伺服器、訂閱主題、發送固定資訊,用戶端通過 pahoMqtt 第三方jar包編寫,你可以自行修改代碼進行更詳細的測試

下面簡述一下項目的目錄結構:

【開源】MQTT推送伺服器——zer0MqttServer(Java編寫)

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 檔案可以針對緩沖區大小、臨時存儲檔案名、伺服器端口等資訊

  1. moquette開源項目
  2. MQTT協定V3.1.1版本
  3. MQTT協定V3.1版本
  4. Java AIO 基礎
  5. 聶永的部落格

源碼

最後附上源碼位址: https://github.com/zer0Black/zer0MQTTServer

在github中選擇分支 release-V1.0 即可。主幹會持續開發,不能保證可以跑通。

繼續閱讀