故事背景

鉴于工作空闲之余,偶然看见了一篇百万级推送架构,正好解决了之前一直想做但没有做的问题,索性三下五除二全栈撸了一遍。这里做的只是一个简单的原型,还没有真正意义上的落地。

系统概览

从0到1构建分布式推送/IM系统

推送核心服务

功能列表

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

在线演示 http://127.0.0.1:8080/swagger-ui.html

推送管理页面

功能列表:

注册开发者帐号
开发者账户登录
创建应用
应用列表
推送消息
消息列表

nginx 配置

location / {
        root   /静态资源目录/push-webUI;
        index  index.html index.htm;
}
    
location /pushAdmin/ {
    proxy_pass   http://127.0.0.1:8080;
}            

 

项目源码猛戳这里

相关文章: