Loading... # PushMe 消息通知平台技术分析 ## 项目概述 PushMe 是一个开源的轻量级消息通知解决方案,由 Android 客户端、自建服务器端和多种接收端组成。该项目旨在为个人开发者和小型团队提供简单、可靠的消息推送能力,无需复杂的注册登录流程,通过 push_key 即可实现消息推送。 **核心特点**: - **简单**:无需登录注册,安装后获取 push_key 即可使用 - **轻量**:Android 原生开发,安装包不到 3M - **可靠**:支持离线消息存储与转发 - **兼容**:接口兼容企业微信/钉钉/飞书群机器人 - **可扩展**:支持插件开发和消息转发 ## 系统架构 ```mermaid graph TD subgraph "发送端" A1[API调用] A2[curl命令] A3[第三方服务] A4[群机器人兼容] end subgraph "PushMe服务器" B1[HTTP API 端口3010] B2[WebSocket服务] B3[消息队列] B4[push_key管理] end subgraph "接收端" C1[Android客户端] C2[Windows客户端] C3[Telegram机器人] end A1 -->|HTTP POST| B1 A2 -->|HTTP POST| B1 A3 -->|HTTP POST| B1 A4 -->|HTTP POST| B1 B1 --> B3 B3 --> B2 B2 -->|WebSocket| C2 B2 -->|原生推送| C1 B2 -->|Bot API| C3 C1 -->|确认回执| B4 C2 -->|确认回执| B4 ``` **架构说明**: 1. **发送端**:支持多种消息来源 - API 调用:任何支持 HTTP 的编程语言 - curl 命令:命令行直接发送 - 第三方服务: webhook 集成 - 群机器人兼容:可直接替换企业微信/钉钉/飞书群机器人地址 2. **PushMe服务器**:核心消息中继 - HTTP API(端口3010):接收消息推送请求 - WebSocket服务:实时推送给桌面客户端 - 消息队列:处理离线消息 - push_key管理:用户身份验证 3. **接收端**:多终端消息同步 - Android客户端:原生推送接收 - Windows客户端:WebSocket 实时接收 - Telegram机器人:跨平台消息转发 ## 技术栈分析 ### 服务器端(PushMeServer) | 组件 | 技术选型 | |------|----------| | 运行时 | Node.js >= 16 | | 进程管理 | PM2 | | 部署方式 | Docker / 源码安装 | | 通信协议 | HTTP + WebSocket | | 消息格式 | JSON | **端口分配**: - **3010**:Web管理界面、消息发送 API、WebSocket 服务(管理员和 Windows 客户端) - **3100**:消息服务端口(Android 客户端连接) ### Android 客户端 | 特性 | 说明 | |------|------| | 系统要求 | Android 7+ | | 开发方式 | 原生 Android 开发 | | 安装包大小 | < 3M | | 后台保活 | 支持多种 ROM 的后台保活设置 | **后台保活策略**: - 权限管理:允许自启动、后台运行 - 电池管理:允许后台高耗电(实测耗电低) - 通知管理:允许消息通知 - Android 12+:需开启 alarm 闹钟权限 - 部分手机:关闭后台网络优化 ### 消息类型支持 | type 参数 | 类型 | 说明 | |-----------|------|------| | text | 通知消息 | 普通文本消息 | | markdown | 通知消息 | Markdown 格式文本消息 | | html | 通知消息 | HTML 格式消息 | | data | 数据消息 | 数据可视化(支持 data/markdata/chart/echarts 格式) | ## 核心功能分析 ### 1. push_key 认证机制 push_key 是 PushMe 的核心认证机制,用户在 Android 客户端生成后,即可用于 API 调用。这种设计避免了传统账号体系的复杂性: ``` 获取流程:安装APP → 生成push_key → 复制使用 → 发送消息 ``` **优势**: - 无需注册登录 - 密钥即身份 - 支持多设备独立密钥 ### 2. 消息通道机制 PushMe 支持自定义消息通道,用户可以为不同来源的消息设置: - 不同的通知声音 - 不同的震动模式 - 不同的通知样式 **应用场景**: - 监控告警:使用紧急提醒 - 消息通知:使用普通提示 - 定时任务:使用静默通知 ### 3. 插件系统 PushMe 支持插件开发,允许用户对收到的消息进行加工处理: ```javascript // 插件开发示例(概念) function processMessage(message) { // 自定义处理逻辑 return modifiedMessage; } ``` ### 4. 消息转发 支持将手机端收到的消息转发到电脑端: - Android 客户端接收消息 - 通过 WebSocket 转发到 Windows 客户端 - 实现跨设备消息同步 ## API 接口 ### 发送消息接口 **请求地址**:`POST https://push.i-i.me/` **请求参数**: | 参数 | 描述 | 必填 | |------|------|------| | push_key | 接口密钥 | 是 | | title | 消息标题 | 与 content 至少填一项 | | content | 消息内容 | 与 title 至少填一项 | | type | 消息类型(text/markdown/html/data) | 否 | | topic | 消息主题(info/success/warning/error) | 否 | **示例请求**: ```bash # 发送文本消息 curl -X POST "https://push.i-i.me/" \ -d "push_key=YOUR_PUSH_KEY" \ -d "title=测试标题" \ -d "content=测试内容" # 发送 Markdown 消息 curl -X POST "https://push.i-i.me/" \ -d "push_key=YOUR_PUSH_KEY" \ -d "title=Markdown测试" \ -d "content=# 标题\n**加粗**内容" \ -d "type=markdown" ``` ### 兼容性接口 PushMe 接口兼容企业微信/钉钉/飞书群机器人,可直接替换 webhook 地址: ```python # 原企业微信机器人 webhook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXX" # 替换为 PushMe webhook = "https://push.i-i.me/?push_key=YOUR_PUSH_KEY" ``` ## 部署方案 ### Docker 部署 ```bash docker run -dit \ -p 3010:3010 \ -p 3100:3100 \ -v $PWD/pushme-server/config:/pushme-server/config \ --name pushme-server \ --restart unless-stopped \ node:16.20.2-alpine3.17 ``` ### 源码部署 ```bash # 环境要求:nodejs >= 16 npm i --registry=https://registry.npmmirror.com npm i pm2 -g --registry=https://registry.npmmirror.com pm2 start server.js --name pushme-server pm2 save pm2 startup ``` ## 应用场景 ### 1. 服务监控告警 ```bash # 服务器监控脚本 curl -X POST "https://push.i-i.me/" \ -d "push_key=YOUR_KEY" \ -d "title=服务器告警" \ -d "content=CPU使用率超过90%" \ -d "topic=error" ``` ### 2. 自动化脚本通知 ```python # Python 脚本集成 import requests def send_notification(title, content): requests.post("https://push.i-i.me/", data={ "push_key": "YOUR_KEY", "title": title, "content": content }) ``` ### 3. CI/CD 流程通知 ```yaml # Jenkins Pipeline stage('Notification') { steps { sh """ curl -X POST "https://push.i-i.me/" \ -d "push_key=\${PUSH_KEY}" \ -d "title=构建通知" \ -d "content=项目 \${JOB_NAME} 构建完成" """ } } ``` ## 技术优势与局限 ### 优势 1. **零门槛使用**:无需注册登录,获取 push_key 即可 2. **轻量高效**:安装包小,资源占用低 3. **自建可控**:支持私有部署,数据安全可控 4. **多端同步**:Android + Windows + Telegram 全覆盖 5. **扩展性强**:支持插件和自定义通道 ### 局限 1. **后台保活依赖 ROM**:部分国产 ROM 后台管理严格 2. **无官方 iOS 客户端**:仅支持 Android 3. **消息历史有限**:离线消息存储容量有限 4. **自建需技术能力**:私有部署需要 Node.js 环境 ## 与同类方案对比 | 方案 | 部署复杂度 | 终端支持 | 消息可靠性 | 自定义能力 | |------|-----------|----------|-----------|-----------| | PushMe | 低 | Android/Windows | 中 | 高 | | Server酱 | 低 | 微信 | 中 | 低 | | Bark | 低 | iOS | 高 | 中 | | Gotify | 中 | 全平台 | 高 | 高 | | 企业微信机器人 | 低 | 全平台 | 高 | 中 | ## 总结 PushMe 是一个设计精良的个人消息推送解决方案,通过简单的 push_key 机制实现了零门槛的消息推送能力。其模块化的架构设计(Android 客户端 + Node.js 服务器 + Windows 客户端)使得用户可以根据需求灵活选择部署方式。 对于个人开发者和小型团队而言,PushMe 提供了一个开箱即用的消息通知平台,特别适合: - 服务器监控告警 - 自动化脚本通知 - CI/CD 流程集成 - 个人消息聚合 项目的开源特性(MIT 许可)和完善的文档支持使其成为一个值得推荐的技术选择。 ## 参考资源 - **GitHub 项目**: [yafoo/pushme](https://github.com/yafoo/pushme) - **服务器端**: [yafoo/pushme-server](https://github.com/yafoo/pushme-server) - **官方网站**: [push.i-i.me](https://push.i-i.me/) - **接口文档**: [push.i-i.me/docs/index](https://push.i-i.me/docs/index) 最后修改:2026 年 01 月 15 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏