Skip to content

truman-ng/go-push

Repository files navigation

📡 go-push WebSocket 推送服务

一个基于 Go 实现的高性能 WebSocket 推送服务,支持客户端注册、心跳机制、消息广播、连接超时清理等功能。适用于比分推送、实时通知等高频率场景。


🛠️ 技术栈

  • Gin:轻量级 Web 框架(用于 RESTful API)
  • Redis:客户端信息持久化存储
  • Gobwas/ws:高性能 WebSocket 实现
  • Go Modules:依赖管理

🚀 快速开始

1. 克隆项目

git clone https://github.com/yourname/go-push.git
cd go-push

2. 安装依赖

go mod tidy

3. 启动服务

go run main.go

服务将启动两个端口:


🧩 功能介绍

  • 获取Token:用户/设备注册生成连接Token。

  • WebSocket连接:携带Token进行连接认证。

  • 心跳机制:维持连接活性。

  • 消息推送:服务端广播消息到所有在线客户端。

  • 连接超时清理:定时移除30秒内未心跳的客户端。


📡 API 接口

获取连接Token

GET http://localhost:8080/get/token?deviceId=xxx&userId=yyy&isLogin=true

返回示例:

{
  "data": "base64TokenString"
}

心跳

GET http://localhost:8080/heartbeat?token=base64TokenString

推送消息

POST http://localhost:8080/push/new/score/message
Content-Type: application/json

{
  "message": "这是一条广播消息"
}

健康检查接口(Health Check)

本服务提供了用于 Kubernetes 就绪检查(readinessProbe)与存活检查(livenessProbe)的接口:

接口说明

  • 路径:GET /health

  • 端口:8080

  • 响应示例:

{
  "status": "healthy"
}

用途

KubernetesDeployment.yaml 中,已将该接口配置为健康检查探针:

readinessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 3

livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 5
  • Readiness Probe:确保服务已准备好处理请求。

  • Liveness Probe:确保服务健康运行,若失败会触发自动重启。


WebSocket 连接方式

连接示例:

wss://localhost:8081/ws?token=base64TokenString&roomIds=1001,2002

客户端建立连接后,将持续接收服务端广播的消息。

房间号参数(roomIds)

  • roomIds 是可选参数,用于指定客户端关注的房间。

  • 格式为逗号分隔的房间号字符串(目前设置支持两个,可根据需求调整):

?roomIds=1001,2002
  • 超过两个房间号会被忽略,只取前两个。

  • 服务端广播消息时,仅向包含指定 roomId 的客户端推送消息,其他客户端不会收到。

使用场景:比赛订阅、频道通知、分组消息推送等。


🧹 客户端清理机制

定时任务 ClientTimeoutChecker 每10秒检查一次所有客户端:

  • 若超过30秒未发送心跳,将关闭连接并移除缓存。

📁 项目结构概览

文件名 说明
websocket.go WebSocket 启动与握手逻辑(8081)
client-manager.go 客户端管理与注册处理
message-manager.go 消息推送处理
route.go HTTP 路由注册(8080)
schedule_task.go 客户端定时检查任务

About

Go-Push 是一个基于 Go 开发的高性能实时推送服务,支持多平台客户端通过 WebSocket 接收服务端主动推送的消息,采用 Redis 作为中间件进行会话认证和消息队列管理。项目提供 RESTful API 支持登录认证和消息发布,内置客户端心跳监测与超时清理机制,确保服务稳定。通过 Docker 和 Kubernetes 实现轻量化部署与弹性扩展,适用于实时聊天、通知系统和监控等场景。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors