重要的放前面:V1.0版本是一個很是基礎的版本,除了完整的MQTT協議實現外,其餘功能什麼都沒作。java
MQTT 協議是 IBM 開發的即時通信協議,相對於 IM 的實際上的準標準協議 XMPP 來講,MQTT 更小,更快,更輕量。MQTT 適合於任何計算能力有限,工做在低帶寬、不可靠的網絡中的設備,包括手機,傳感器等等。git
開發此客戶端的目的,是由於實際項目中須要用到推送、即時通信的內容,而第三方平臺有時候不穩定,遇到問題難於調試。因此決定本身開發一套即時通信系統。選用 MQTT 的緣由正如上所說,它比XMPP更適合手機端使用。具體比較請參看:Android推送方案分析(MQTT/XMPP/GCM)。github
項目斷斷續續寫了快一年(2015年2月~12月),大部分在業餘時間完成。代碼中的每一個函數都有明確的中文註釋信息,對於 MQTT 實現的部分,更是細節到每一個功能對應的文檔的頁數都進行了標明。此服務器既能夠針對具體項目二次開發使用,也能夠用於 MQTT 協議的學習。web
全部還沒作的都是我以後想要升級的
安全
運行包 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 文件能夠針對緩衝區大小、臨時存儲文件名、服務器端口等信息
最後附上源碼地址: https://github.com/zer0Black/zer0MQTTServer
在github中選擇分支 release-V1.0 便可。主幹會持續開發,不能保證能夠跑通。