PushMe 消息通知平台技术分析
项目概述
PushMe 是一个开源的轻量级消息通知解决方案,由 Android 客户端、自建服务器端和多种接收端组成。该项目旨在为个人开发者和小型团队提供简单、可靠的消息推送能力,无需复杂的注册登录流程,通过 push_key 即可实现消息推送。
核心特点:
- 简单:无需登录注册,安装后获取 push_key 即可使用
- 轻量:Android 原生开发,安装包不到 3M
- 可靠:支持离线消息存储与转发
- 兼容:接口兼容企业微信/钉钉/飞书群机器人
- 可扩展:支持插件开发和消息转发
系统架构
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架构说明:
发送端:支持多种消息来源
- API 调用:任何支持 HTTP 的编程语言
- curl 命令:命令行直接发送
- 第三方服务: webhook 集成
- 群机器人兼容:可直接替换企业微信/钉钉/飞书群机器人地址
PushMe服务器:核心消息中继
- HTTP API(端口3010):接收消息推送请求
- WebSocket服务:实时推送给桌面客户端
- 消息队列:处理离线消息
- push_key管理:用户身份验证
接收端:多终端消息同步
- 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 支持插件开发,允许用户对收到的消息进行加工处理:
// 插件开发示例(概念)
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) | 否 |
示例请求:
# 发送文本消息
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 地址:
# 原企业微信机器人
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 部署
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源码部署
# 环境要求: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. 服务监控告警
# 服务器监控脚本
curl -X POST "https://push.i-i.me/" \
-d "push_key=YOUR_KEY" \
-d "title=服务器告警" \
-d "content=CPU使用率超过90%" \
-d "topic=error"2. 自动化脚本通知
# 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 流程通知
# 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} 构建完成"
"""
}
}技术优势与局限
优势
- 零门槛使用:无需注册登录,获取 push_key 即可
- 轻量高效:安装包小,资源占用低
- 自建可控:支持私有部署,数据安全可控
- 多端同步:Android + Windows + Telegram 全覆盖
- 扩展性强:支持插件和自定义通道
局限
- 后台保活依赖 ROM:部分国产 ROM 后台管理严格
- 无官方 iOS 客户端:仅支持 Android
- 消息历史有限:离线消息存储容量有限
- 自建需技术能力:私有部署需要 Node.js 环境
与同类方案对比
| 方案 | 部署复杂度 | 终端支持 | 消息可靠性 | 自定义能力 |
|---|---|---|---|---|
| PushMe | 低 | Android/Windows | 中 | 高 |
| Server酱 | 低 | 微信 | 中 | 低 |
| Bark | 低 | iOS | 高 | 中 |
| Gotify | 中 | 全平台 | 高 | 高 |
| 企业微信机器人 | 低 | 全平台 | 高 | 中 |
总结
PushMe 是一个设计精良的个人消息推送解决方案,通过简单的 push_key 机制实现了零门槛的消息推送能力。其模块化的架构设计(Android 客户端 + Node.js 服务器 + Windows 客户端)使得用户可以根据需求灵活选择部署方式。
对于个人开发者和小型团队而言,PushMe 提供了一个开箱即用的消息通知平台,特别适合:
- 服务器监控告警
- 自动化脚本通知
- CI/CD 流程集成
- 个人消息聚合
项目的开源特性(MIT 许可)和完善的文档支持使其成为一个值得推荐的技术选择。
参考资源
- GitHub 项目: yafoo/pushme
- 服务器端: yafoo/pushme-server
- 官方网站: push.i-i.me
- 接口文档: push.i-i.me/docs/index