故事背景
鉴于工作空闲之余,偶然看见了一篇百万级推送架构,正好解决了之前一直想做但没有做的问题,索性三下五除二全栈撸了一遍。这里做的只是一个简单的原型,还没有真正意义上的落地。
系统概览
推送核心服务
功能列表
1、本地路由表(用户和连接的映射关系)
2、redis路由关系(用户和服务的映射关系)
3、发布消息(推送和IM)
JVM启动参数
-Dhost=127.0.0.1
-Dport=6688
-Dredis.host=127.0.0.1
-Dredis.port=6379
-Dzk.hosts=127.0.0.1:2181
-Dios.certFilePath=
-Dios.certPwd=
推送客户端
对app作为长连接客户端,对restApi,webProxy提供代理客户端
功能列表
1. IM(聊天室)
2. 消息推送(APP推送)
特征
1. 服务发现
2. 连接动态切换
web代理服务
采用webSocket协议实现,对client封装一层,用于兼容移动端混合开发以及H5/WEB
功能列表
1.IM聊天
2.心跳检测
3.消息推送
REST API
提供满足 REST 规范的 HTTP API 来使用常用的功能
使用范围
1. appSdk,
2. appServer
3. 管理后台
APP推送
注册开发者帐号
开发者账户登录
创建app应用
设备注册
客户端鉴权(appKey+appSecret),返回一路在线的推送服务的连接信息
推送消息
IM即时聊天
IM消息
用户维护
用户关系维护
群组维护
群组关系维护
消息管理
启动参数 -Dzk.hosts=127.0.0.1:2181
推送管理页面
功能列表:
注册开发者帐号
开发者账户登录
创建应用
应用列表
推送消息
消息列表
nginx 配置
location / {
root /静态资源目录/push-webUI;
index index.html index.htm;
}
location /pushAdmin/ {
proxy_pass http://127.0.0.1:8080;
}