{"repo":"liutian/light-push","free":true,"listed":false,"github":"https://github.com/liutian/light-push","clone":"git clone https://github.com/liutian/light-push.git","description":"轻量级推送服务和实时在线监控平台，同时用于开发即时通信系统，基于node的socket.io，支持web、android、ios客户端，支持移动端离线推送，可进行分布式部署","language":"JavaScript","stars":144,"topics":["apns","redis","pm2","nginx","push","socket-io","docker","node","websocket","yaml"],"license":null,"category":"databases-storage","readme_excerpt":"概述 轻量级推送服务和实时在线监控平台，同时用于开发即时通信系统，基于node的socket.io，支持web、android、ios客户端，支持移动端离线推送，可进行分布式部署 前言 随着互联网网速的不断提升，即时消息通信的应用场景越来越多。我在参与公司多个产品的研发中，不止一次的遇到需要集成聊天功能的需求。既然是聊天就必须把消息尽快送达目标用户，做的多了就有了一套自己的经验和想法，然后借着闲暇时间一点点的就写出了这个项目。这个项目灵感来源于实际开发工作，同时又把它应用到自己的工作中。希望它能帮到你，也希望你能给我更多的反馈和改进意见，让它帮助更多的人。 系统概要和功能特性 - 业务系统通过 RESTful 接口方式调用推送服务 - 客户端通过 socket.io 协议与推送服务建立连接 - 通过命名空间对客户端进行安全隔离和管理，不同客户端之间不能相互收发消息，如果业务系统是saas模式，命名空间相当于公司或组织的概念 - 使用负载均衡器来负责每一个客户端的接入工作，每一个客户端随机分配给一个推送服务的后端节点，保证推送服务的负载更加平均(负载均衡器指类似nginx的服务) - 单个客户端和推送服务建立强关联，即一旦客户端与推送服务的某个节点建立连接，除非客户端下线否则所有数据处理和操作都有该节点完成，同时保证会话信息不丢失，可实现多机多进程部署 - 使用 redis 保存系统运行时所需的数据，保证系统响应速度 - 可实现单个用户多端连接，满足聊天系统多端登陆需求，同时接收消息，每一个客户端至少有一个默认房间，房间名: user + userid - 通过界面UI或者接口来监控，统计客户端在线信息 - 通过界面UI模拟客户端上线/下线 - 通过界面UI模拟推送功能 - 模拟网络异常下推送服务已经推送消息但是客户端无法接收的情况，方便客户端编写数据同步功能 - 通过界面UI或者接口统计消息到达率(需要客户端ack确认回执) - 可查询历史消息，可统计每天的推送总量，以及当前小时/当前分钟的推送总量 - 当客户端未收到推送消息时，如果客户端为 ios 平台则用 apns 做离线推送，如果是 android 会保存该消息直到客户端上线 - 监听每一个客户端接入事件并可回调业务系统，由业务系统决定客户端是否有权接入 - 监听每一个用户的离线事件并可回调业务系统 - 客户端房间变动事件可选择性的广播推送到对应的房间中 - 客户端可主动推送消息，满足聊天系统中正在输入中的功能需求（正常情况的推送应有业务系统发起，保障推送服务的安全和稳定） - 可为每一个客户端保存一些特殊数据，比如最后一次的接入信息，客户端操作系统信息等等，同时提供一键清除僵尸客户端功能(一定时间未接入过推送服务器) - 推送服务本身支持cors跨域访问，方便基于推送服务来开发管理界面 - 采用消息队列方式推送离线消息，保证系统在高并发下的稳定性 - 服务运行时的各个参数可自行配置，比如消息默认失效时间等 快速体验 - sudo docker run -id -p 443:443 -p 80:80 --name light-push-demo liuss/light-push:1.2.0 /mnt/data/start.sh - 访问管理页面: https://127.0.0.1/push-admin 登录名 admin 密码 123456 客户端调用(web) 环境搭建 - 安装 nodejs (需要超级管理员权限) 详情 - 安装pm2，如果安装中报错或者长时间没有响应 尝试通过第三","default_branch":null,"files":null,"tree":[],"storefront":"/r/liutian","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/liutian/light-push/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}