【開源】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 文件,即可啟動服務器。

測試方法也同樣簡單:

運行包 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 文件可以針對緩沖區大小、臨時存儲文件名、服務器端口等信息

參考幫助

  1. moquette開源項目

  2. MQTT協議V3.1.1版本

  3. MQTT協議V3.1版本

  4. Java AIO 基礎

  5. 聶永的博客

源碼

最后附上源碼地址: https://github.com/zer0Black/zer0MQTTServer

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM