MPush开发手册 -- Push, IM, 消息推送, Android, 物联网, 免费, 开源, 安全, 加密, 集 V1.0
第一章 系统介绍
系统介绍
图片地址:static.oschina/uploads/img/201806/21113422_dBgn.png
发展状况
2016.2 1.0-beta
2016.3 1.0-release 上线
2016.5 开源预研,业务剥离
2016.8 正式开源v0.0.1
2016.9 v0.0.2, v0.0.3
2016.10 v0.0.4, v0.0.5
2016.11 v0.0.6
2016.12 v0.6.1
2017.1 v0.7.0
2017.2 v0.7.1
2017.8 v0.8.0
后续目标
因为Java的开源消息系统非常少,希望有兴趣的朋友可以一起参与进来,做一个最好的java开源消息推送系统。参与方式:如何参与Github开源项目(www.jianshu/p/a8de24f8a845)
项目成员
夜[QQ:251939168]、黄志磊、魏永霖、老佛爷
帮助与支持
QQ: 114583699
捐助
基于Netty的开源实时消息推送系统
2015.12 项目启动
图片地址:static.oschina/uploads/img/201703/09152814_k2YZ.png
功能特点
1. 源码全部开放,包括server、android、ios 等
2. 代码质量高,全部模块化设计,真正的商用级产品,考虑到推送中遇到的大部分场景
3. 安全性高,基于RSA精简的加密握手协议,简单,高效,安全
4. 支持断线重连,及弱网下的快速重连,无网络下自动休眠节省电量和资源
5. 协议简洁,接口流畅,支持数据压缩,更加节省流量
6. 支持集部署,支持负载均衡,基于成熟的zookeeper实现
7. 用户路由使用redis集,支持单写,双写,集分组;性能好,可用性高
8. 支持http代理,一根TCP链接接管应用大部分请求,让http请求更加及时
9. 高度可配置化,基本上通过修改配置可满足大部分场景
10. 扩展性强,高度模块化,基于SPI模式的可拔插设计,以满足特殊需求
11. 监控完善,日志详细,可快速排查线上问题及服务调优
第二章 快速上手
源码地址
Github源码
• group github/mpusher/ 源代码空间
• server github/mpusher/mpush 服务端源码
• alloc github/mpusher/alloc 调度器源码
• mpns github/mpusher/mpns 个性化推送中心源码
• java-client github/mpusher/mpush-client-java 纯java客户端源码
• android sdk&demo github/mpusher/mpush-android 安卓SDK和DEMO源码• IOS sdk(swift) github/mpusher/mpush-client-swift swift版客户端源码
• IOS sdk(OC) github/mpusher/mpush-client-oc Object C 客户端源码
• websoket(JS) github/mpusher/mpush-client-js websocket js 客户端源码码云源码
• group git.oschina/mpush 源代码空间
• server git.oschina/mpush/mpush 服务端源码
• alloc git.oschina/mpush/alloc 调度器源码
• java-client git.oschina/mpush/mpush-client-java 纯java客户端源码
• android sdk&demo git.oschina/mpush/mpush-android 安卓SDK和DEMO源码
• IOS sdk(swift) git.oschina/mpush/mpush-client-swift swift版客户端源码
服务部署
部署提示:
1. 详细部署文档请点此查看(github/mywiki/mpush-
doc/blob/master/SUMMARY.md),以下仅仅是mpush server 本身的部署
2. mpush 服务只依赖于zookeeper和redis,当然还有JDK>=1.8
部署流程
1. 安装jdk 1.8 以上版本并设置%JAVA_HOME%
2. 安装zookeeper (安装配置步骤略)
3. 安装Redis (安装配置步骤略)
4. 下载mpush server 最新的正式包
github/mpusher/mpush/releases(github/mpusher/mpush/releases )
(也可以自己根据源码构建:mvn clean package -Pzip,pub )
1. 解压下载的tar包tar -ar.gz 到 mpush 目录, 结构如下
1. 修改 conf 目录下的 f 文件, f 里的配置项会覆盖同目录下的
drwxrwxr-x 2 shinemo shinemo 4096 Aug 20 09:30 bin —> 启动脚本
drwxrwxr-x 2 shinemo shinemo 4096 Aug 20 09:52 conf —> 配置文件
drwxrwxr-x 2 shinemo shinemo 4096 Aug 20 09:29 lib —> 核心类库
drwxrwxr-x 1 shinemo shinemo 1357 May 31 11:07 LICENSE
drwxrwxr-x 2 shinemo shinemo 4096 Aug 20 09:32 logs —> 日志目录
drwxrwxr-x 1 shinemo shinemo 4096 May 31 11:07 README.md
drwxrwxr-x 2 shinemo shinemo 4096 Aug 20 09:52 tmp
1. 给bin目录下的脚本增加执行权限chmod u+x *.sh
2. 执行./mp.sh start 启动服务, 查看帮助./mp.sh 目前支持的命令:
1. cd logs 目录,cat mpush.out 查看服务是否启动成功
集成开发
1. 启动入口类 com.mpush.bootstrap.ServerLauncher.java
1. 在工程里添加classpath下添加f 配置文件,配置方式参照服务部署
(doc.io?v=24639&t=134336)第6点unknown怎么处理
源码测试
1. git clone github/mpusher/mpush.git
2. 导入到eclipse或Intellij IDEA
3. 打开mpush-test 模块,所有的测试代码都在该模块下
Usage: ./mp.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
set-env.sh 用于增加和修改jvm启动参数,比如堆内存、开启远程调试端口、开启jmx等
启动调用 start 方法,停止调用 stop 方法
1. 修改配置文件src/test/f文件修改方式参照服务部署
(doc.io?v=24639&t=134336)第6点
2. 运行st.sever.ServerTestMain.java启动长链接服务
3. 运行st.client.ConnClientTestMain.java 模拟一个客户端
4. 运行st.push.PushClientTestMain.java 模拟给用户下发消息
5. 可以在控制台观察日志看服务是否正常运行,消息是否下发成功
6. websocket 客户端测试地址 12
7.0.0.1:8080/index.html
7. alloc 启动入口 com.shinemo.mpush.alloc.AllocServerMainTest.java
第三章 架构分析
系统架构
图片地址:static.oschina/uploads/img/201610/29215003_BWQU.png
说明
1. 最左侧三大组件分别是日志系统、监控系统、控制台治理服务
• Log System 主要负责业务日志大输出,主要有链接相关日志、推送链路日志、心跳日志、监控日志等
• Monitor 主要用作系统状态监控,可用于系统调优,包括jvm内存,线程,线程池,系统堆栈
,垃圾回收情况,内存泄漏情况等。
• AdminServer主要用于在控制台对单台机器进行控制与探查,比如参看连接数量,在线用户数
,取消本级ZK注册,关闭服务等
1. 右侧三个分别是ZK服务,配置中心和安全工具箱
• ZK Client 主要负责注册长链接ip:port,网关ip:port以及监听各个节点变化,同时增加了缓存
• ConfigCenter 是MPUSH Server 配置化的关键,贯穿到各个模块,非常重要
• Sercutity Box 主要实现了RSA加密,DES加密,会话密钥生成及Session复用(用于快速重连)
1. Core模块分别是长链接服务,网关服务,Packet编解码及分发模块,Message序列化及处理模块
• ConnectServer用于维持和客户端之间的TCP通道,主要负责和客户端交互
• GatewayServer用于处理Mpush Server之间的消息交互比如踢人,发送PUSH
• Packet主要是协议部分的编解码和包的完整性校验,最大长度校验等
• PacketReceiver主要负责消息的分发,分发是根据Command来的
• Connection/ConnectionManager主要负责链接管理,定时检查链接空闲情况,是否读写超时,如果链接断开发出相应的事件给路由中心去处理
• Message部分是整个的业务核心处理了处理消息的序列化,还有压缩、加密等
,MessageHandler会根据不同消息独立处理自己所属的业务,主要有:心跳响应、握手及密钥交
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论