【开源】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 文件可以针对缓冲区大小、临时存储文件名、服务器端口等信息
参考帮助
源码
最后附上源码地址: https://github.com/zer0Black/zer0MQTTServer
在github中选择分支 release-V1.0 即可。主干会持续开发,不能保证可以跑通。
【开源】MQTT推送服务器——zer0MqttServer(Java编写)的更多相关文章
- IOS 推送-配置与代码编写
IOS 推送配置与代码编写 这里介绍IOS的推送,本文章已经在IOS6/7/8上都能运行OK,按照道理IOS9应该没问题. 大纲: 1.文章前提 2.推送介绍 3.推送文件账号设置 4.推送证书介绍 ...
- MPush开源消息推送系统:简洁、安全、支持集群
引言由于之前自己团队需要一个消息推送系统来替换JPUSH,一直找了很久基本没有真正可用的开源系统所有就直接造了个轮子,造轮子的时候就奔着开源做打算的,只是后来创业项目失败一直没时间整理这一套代码,最近 ...
- SingalR 构建 推送服务器初探
项目需要用到推送,于是重新研究了下推送框架,最好能够独立成一个服务,与业务无关的服务,可以给所有的项目通用.找了好久最终决定用SinglR 框架. Signal 是微软支持的一个运行在 Dot NET ...
- 实战WEB 服务器(JAVA编写WEB服务器)
实战WEB 服务器(JAVA编写WEB服务器) 标签: web服务服务器javawebsockethttp服务器 2010-04-21 17:09 11631人阅读 评论(24) 收藏 举报 分类: ...
- 用 centrifugo 搭建 消息推送服务器 docker + rancher 搭建
关于消息推送服务器 目前有很多第三方的开放成熟的推送服务.鉴于项目需要 我们项目需要自己搭建 自己的推送服务. 我们的推送应用场景 聊天消息 项目内部消息提醒 移动设备接受消息 应用到的相关软件工具知 ...
- React Native 实现MQTT 推送调研 (1)
一.推送几种实现方式: (1)通过SMS(Short Message Service,短信群发服务系统) 进行服务器端和客户端的交流通信.在Android平台上,可以通过拦截SMS消息并解析内容来了解 ...
- Android Server Push - MQTT推送实现tokudu
转自:http://www.juapk.com/thread-2834-1-1.html 项目说明:采用MQTT协议实现Android推送消息传输协议:IBM的MQTT协议 JAR包地址:下载服务器安 ...
- mqtt推送介绍
方案1.使用GCM服务(Google Cloud Messaging) 简介:Google推出的云消息服务,即第二代的C2DM. 优点:Google提供的服务.原生.简单,无需实现和部署服务端. 缺点 ...
- 推送通知iOS客户端编写实现及推送服务器端编写
http://blog.csdn.net/tonny_guan/article/details/8963262 1.iOS客户端编程 推送通知技术在Mac OS X和iOS系统上都可以运行,我们本章主 ...
随机推荐
- C/C++调试工具gdb
关于Gdb的使用,请参考:http://blog.csdn.net/haoel/article/details/2879
- centos下建立双机信任关系
在有些情况下,我们希望在两台centos机器之间建立ssh连接的时候,可以不用输入密码.最常见的情况就是在使用脚本做数据库备份的时候.这种情况下,我们可以通过公钥/私钥来建立双机之间的信任关系. 网上 ...
- EXT.JS的PROXY放在哪里,STORE放在哪里,绝对是个技术活儿啊。
我理解的是,单独的STORE,会在应用程序开始时就加载, 而VIEWMODEL的STORE,会在VIEW加载时才开始加载. PROXY放在STORE,则会在调用这个STORE的VIEW才能请求服务器数 ...
- 主机ping不同虚拟机
前提:今天加班时,一不小时把网线踢掉了,然而虚拟机怎么都ping不通了,试过很多办法; 最后.... 简单粗暴的重启了我的主机,对,是主机,不是虚拟机,ok,问题解决; over...
- 学习微信小程序之css10外边距
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 5款强大的Java Web开发工具
1.WebBuilder这是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发:高效.稳定和可扩展的特点,适合复杂企 ...
- 条码固定资产管理PDA应用
条码固定资产管理解决方案 一.客户挑战与需求 随着企业经营管理的不断升级,固定资产管理的高效化.智能化管理越来越受到企业管理人员的重视.然而,固定资产具有数量大.种类多.价值高.使用周期长.使用地点分 ...
- [软件推荐]快速文件复制工具(Limit Copy) V4.0 绿色版
快速文件复制工具(Limit Copy)绿色版是一款智能变频超快复制绿色软件. 快速文件复制工具(Limit Copy)功能比较完善,除了文件复制还可以智能变频,直接把要复制的文件拖入窗口即可,无需手 ...
- Codeforces Round #344 (Div. 2) B. Print Check
B. Print Check time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- ubuntu常用命令大全
一.文件/文件夹管理 ls 列出当前目录文件(不包括隐含文件) ls -a 列出当前目录文件(包括隐含文件) ls -l 列出当前目录下文件的详细信息 cd .. 回当前目录的上一级目录 cd - 回 ...