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

目錄

說明

重要的放前面:V1.0版本是一個很是基礎的版本,除了完整的MQTT協議實現外,其餘功能什麼都沒作。java

MQTT 協議是 IBM 開發的即時通信協議,相對於 IM 的實際上的準標準協議 XMPP 來講,MQTT 更小,更快,更輕量。MQTT 適合於任何計算能力有限,工做在低帶寬、不可靠的網絡中的設備,包括手機,傳感器等等。git

開發此客戶端的目的,是由於實際項目中須要用到推送、即時通信的內容,而第三方平臺有時候不穩定,遇到問題難於調試。因此決定本身開發一套即時通信系統。選用 MQTT 的緣由正如上所說,它比XMPP更適合手機端使用。具體比較請參看:Android推送方案分析(MQTT/XMPP/GCM)github

項目斷斷續續寫了快一年(2015年2月~12月),大部分在業餘時間完成。代碼中的每一個函數都有明確的中文註釋信息,對於 MQTT 實現的部分,更是細節到每一個功能對應的文檔的頁數都進行了標明。此服務器既能夠針對具體項目二次開發使用,也能夠用於 MQTT 協議的學習。web

功能

已實現:
  • 網絡傳輸功能(使用 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 便可。主幹會持續開發,不能保證能夠跑通。

相關文章
相關標籤/搜索