重要的放前面: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 便可。主干会持续开发,不能保证能够跑通。