基于Go语言(Golang)的Gin框架开发的推送通知微服务器。
gorush是一个轻量级的推送通知服务器,支持iOS(APNS)和Android(FCM/GCM)平台,提供高性能的推送服务。该服务器采用Go语言开发,使用Gin框架构建RESTful API,支持多平台推送、消息队列、统计监控等功能,适用于需要向移动设备发送推送通知的应用服务。
可从发布页面下载预编译二进制文件。
使用Go安装:
bash$ go get -u -v github.com/appleboy/gorush
Linux系统:
bash$ wget [***] -O gorush
OS X系统:
bash$ wget [***] -O gorush
Windows系统:
bash$ wget [***] -O gorush.exe
________ .__ / _____/ ____ _______ __ __ ______| |__ / \ ___ / _ \\_ __ \| | \/ ___/| | \ \ \_\ \( <_> )| | \/| | /\___ \ | Y \ \______ / \____/ |__| |____//____ >|___| / \/ \/ \/ Usage: gorush [options] 服务器选项: -p, --port <port> 客户端连接端口 (默认: 8088) -c, --config <file> 配置文件路径 -m, --message <message> 通知消息内容 -t, --token <token> 设备令牌 --title <title> 通知标题 --proxy <proxy> 代理URL (仅用于GCM) --pid <pid path> 进程ID文件路径 iOS选项: -i, --key <file> 证书密钥文件路径 -P, --password <password> 证书密钥密码 --topic <topic> iOS主题 --ios 启用iOS推送 (默认: false) --production iOS生产环境模式 (默认: false) Android选项: -k, --apikey <api_key> Android API密钥 --android 启用Android推送 (默认: false) 通用选项: -h, --help 显示帮助信息 -v, --version 显示版本信息
使用以下命令发送单条Android通知:
bash$ gorush -android -m="通知消息内容" -k="API密钥" -t="设备令牌"
参数说明:
-m: 通知消息内容-k: Firebase Cloud Messaging API密钥-t: 设备令牌--title: 通知标题--proxy: 设置HTTP代理URL(仅用于GCM)使用以下命令发送单条iOS通知:
bash$ gorush -ios -m="通知消息内容" -i="证书文件路径" -t="设备令牌" -topic="APNs主题"
参数说明:
-m: 通知消息内容-i: Apple推送通知证书路径(pem或p12文件)-t: 设备令牌--title: 通知标题--topic: 远程通知主题--password: 证书密码默认使用APNs开发环境。如需使用生产环境,请添加-production标志:
bash$ gorush -ios -m="通知消息内容" -i="证书文件路径" -t="设备令牌" -production
确保配置文件存在(默认config.yml),默认端口为8088:
bash$ gorush -c config.yml
使用httpie工具获取API服务器状态:
bash$ http -v --verify=no --json GET https://localhost:8088/api/stat/go
gorush提供以下API端点:
/api/stat/go - 获取Golang运行时信息(cpu, 内存, gc等)/api/stat/app - 获取通知成功和失败统计/api/config - 获取服务器配置信息/sys/stats - 获取系统状态和性能统计/metrics - 获取Prometheus指标/api/push - 发送推送通知返回Golang运行时信息,HTTP状态码200:
json{ "time": 1460686815848046600, "go_version": "go1.6.1", "go_os": "darwin", "go_arch": "amd64", "cpu_num": 4, "goroutine_num": 15, "gomaxprocs": 4, "cgo_call_num": 1, "memory_alloc": 7455192, "memory_total_alloc": 8935464, "memory_sys": ***, "memory_lookups": 17, "memory_mallocs": 31426, "memory_frees": ***, "memory_stack": 524288, "heap_alloc": 7455192, "heap_sys": 8912896, "heap_idle": 909312, "heap_inuse": 8003584, "heap_released": 0, "heap_objects": ***, "gc_next": 9754725, "gc_last": 1460686815762559700, "gc_num": 2, "gc_per_second": 0, "gc_pause_per_second": 0, "gc_pause": [ 0.326576, 0.227096 ] }
返回通知成功和失败统计信息:
json{ "version": "v1.6.2", "queue_max": 8192, "queue_usage": 0, "total_count": 77, "ios": { "push_success": 19, "push_error": 38 }, "android": { "push_success": 10, "push_error": 10 } }
返回系统状态和性能统计:
json{ "pid": 80332, "uptime": "1m42.428010614s", "uptime_sec": 102.428010614, "time": "2016-06-26 12:27:11.675973571 +0800 CST", "unixtime": ***, "status_code_count": { }, "total_status_code_count": { "200": 5 }, "count": 0, "total_count": 5, "total_response_time": "10.422441ms", "total_response_time_sec": 0.010422441000000001, "average_response_time": "2.084488ms", "average_response_time_sec": 0.0020844880000000002 }
返回Prometheus监控指标,可用于系统监控和告警。
发送推送通知的主要API端点。请求体需包含notifications数组,每个元素代表一个推送任务。
每个通知对象支持以下参数:
| 参数名 | 类型 | 描述 | 是否必需 | 备注 |
|---|---|---|---|---|
| tokens | 字符串数组 | 设备令牌列表 | 是 | |
| platform | 整数 | 平台类型(iOS=1, Android=2) | 是 | 1=iOS, 2=Android |
| message | 字符串 | 通知消息内容 | 否 | |
| title | 字符串 | 通知标题 | 否 | |
| priority | 字符串 | 消息优先级 | 否 | normal或high |
| content_available | 布尔值 | 数据消息是否唤醒应用 | 否 | |
| sound | 字符串 | 通知提示音类型 | 否 | |
| data | 对象 | 自定义数据 | 否 | |
| retry | 整数 | 失败重试次数 | 否 | 需小于配置中的max_retry值 |
| api_key | 字符串 | Android API密钥 | 否 | 仅Android |
| to | 字符串 | 目标设备令牌、通知密钥或主题 | 否 | 仅Android |
| collapse_key | 字符串 | 通知折叠键 | 否 | 仅Android |
| delay_while_idle | 布尔值 | 设备空闲时延迟发送 | 否 | 仅Android |
| time_to_live | 整数 | 消息在GCM存储的过期时间 | 否 | 仅Android |
| restricted_package_name | 字符串 | 应用包名 | 否 | 仅Android |
| dry_run | 布尔值 | 测试请求不实际发送 | 否 | 仅Android |
| notification | 对象 | GCM消息负载 | 否 | 仅Android |
| expiration | 整数 | 通知过期时间 | 否 | 仅iOS |
| apns_id | 字符串 | 通知唯一标识符 | 否 | 仅iOS |
| topic | 字符串 | 远程通知主题 | 否 | 仅iOS |
| badge | 整数 | 应用图标 badge 数量 | 否 | 仅iOS |
| category | 字符串 | 通知分类 | 否 | 仅iOS |
| alert | 对象 | iOS通知内容 | 否 | 仅iOS |
iOS通知alert对象支持以下参数:
| 参数名 | 类型 | 描述 | 是否必需 |
|---|---|---|---|
| title | 字符串 | 标题 | 否 |
| body | 字符串 | 消息内容 | 否 |
| subtitle | 字符串 | 副标题 | 否 |
| action | 字符串 | 操作按钮标签 | 否 |
| action-loc-key | 字符串 | 操作按钮本地化键 | 否 |
| launch-image | 字符串 | 启动图片文件名 | 否 |
| loc-args | 字符串数组 | 本地化参数 | 否 |
| loc-key | 字符串 | 本地化键 | 否 |
| title-loc-args | 字符串数组 | 标题本地化参数 | 否 |
| title-loc-key | 字符串 | 标题本地化键 | 否 |
Android通知对象支持以下参数:
| 参数名 | 类型 | 描述 | 是否必需 |
|---|---|---|---|
| icon | 字符串 | 通知图标 | 否 |
| tag | 字符串 | 通知标签 | 否 |
| color | 字符串 | 图标颜色,格式#rrggbb | 否 |
| click_action | 字符串 | 点击通知的动作 | 否 |
| body_loc_key | 字符串 | 内容本地化键 | 否 |
| body_loc_args | 字符串 | 内容本地化参数 | 否 |
| title_loc_key | 字符串 | 标题本地化键 | 否 |
| title_loc_args | 字符串 | 标题本地化参数 | 否 |
发送普通iOS通知:
json{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 1, "message": "Hello World iOS!" } ] }
带alert和badge的iOS通知:
json{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 1, "badge": 5, "alert": { "title": "游戏邀请", "body": "Bob想和你玩扑克", "action-loc-key": "PLAY" } } ] }
带自定义数据的iOS通知:
json{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 1, "message": "Hello World iOS!", "data": { "key1": "welcome", "key2": 2 } } ] }
发送普通Android通知:
json{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 2, "message": "Hello World Android!", "title": "您有新消息" } ] }
带notification payload的Android通知:
json{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 2, "message": "Hello World Android!", "title": "您有新消息", "notification": { "icon": "myicon", "color": "#***" } } ] }
带自定义数据的Android通知:
json{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 2, "message": "Hello World Android!", "title": "您有新消息", "data": { "Nick": "Mario", "body": "精彩比赛!", "Room": "PortugalVSDenmark" } } ] }
发送多条不同平台的通知:
json{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 1, "message": "Hello World iOS!" }, { "tokens": ["token_c", "token_d"], "platform": 2, "message": "Hello World Android!" } ] }
成功响应:
json{ "success": "ok" }
错误响应状态码:
| 状态码 | 消息 | 说明 |
|---|---|---|
| 400 | Missing notifications field. | 请求缺少notifications字段 |
| 400 | Notifications field is empty. | notifications字段为空 |
| 400 | Number of notifications(50) over limit(10) | 通知数量超过限制 |
gorush使用YAML格式的配置文件,默认路径为
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429