轻量级推送服务和实时在线监控平台,基于node的socket.io,支持web、android、ios客户端,支持移动端离线推送,可大规模集群部署
随着互联网网速的不断提升,实时消息的应用场景越来越多。我在参与公司多个产品的研发中,不止一次的遇到需要集成聊天功能的需求。既然是聊天就必须把消息尽快送达目标用户,做的多了就有了一套自己的经验和想法,然后借着闲暇时间一点点的就写出了这个项目。这个项目灵感来源于实际开发工作,同时又把它应用到自己开发工作中。希望它能帮到你,也希望你能给我更多的反馈和改进意见,让它帮到更多的人。
业务系统通过restful接口方式调用推送服务
restful
客户端通过socket.io协议和推送服务器建立连接
socket.io
通过命名空间对客户端进行安全隔离和管理,不同客户端之间不能相互收发消息,如果业务系统是saas模式,命名空间相当于公司或组织的概念
使用负载均衡器来负责每一个客户端的接入工作,每一个客户端随机分配给一个后端服务,保证后端服务负载更佳平均(需要安装nginx)
单个客户端和后端服务建立强关联,会话信息不丢失,可实现多机多进程部署
使用redis保存相关数据,后端服务的整体响应速度更快
redis
可实现单个用户多端连接,满足聊天系统多端登陆需求
通过界面或者接口来监控和统计客户端在线信息
通过界面模拟客户端上线/下线
通过界面模拟推送功能
模拟网络异常下的推送,方便客户端编写数据同步功能
通过界面或者接口统计消息到达率(需要客户端ack确认回执)
可查询历史消息,可统计每天的推送总量,以及当前小时/当前分钟的推送总量
当客户端未收到推送消息时,如果客户端为ios平台则用apns做离线推送,如果是android会保存该消息直到客户端上线
ios
apns
android
监听每一个客户端接入事件并可回掉业务系统由业务系统决定客户端是否有权接入
监听每一个用户的离线事件并可会掉业务系统
客户端房间变动事件可选择行的广播推送到对应的房间中
客户端可主动推送消息,满足聊天系统中正在输入中的功能需求
可为每一个客户端保存一些特殊数据,比如最后一次的接入信息,操作系统信息等等,同时提供一键清除僵尸客户端功能(一定时间未接入过服务器)
后端服务本身支持cors跨域访问
采用消息队列方式推送离线消息
服务运行时的各个参数可自行配置,比如消息默认失效时间,房间名最大长度等等
docker run -id -p 443:443 --name push-demo liuss/push:/mnt/data/start.sh 需要将 version 改成对应的版本号
docker run -id -p 443:443 --name push-demo liuss/push:/mnt/data/start.sh
version
访问管理页面: https://127.0.0.1 登录名 demo 密码 123456 勾选管理员选项
https://127.0.0.1
在线体验