README.md - 文档

gateway_sdk 包

功能

提供从 外部应用(非 Worker 进程)直接调用 Gateway API 的 SDK。

对应 PHP 版在非 workerman 环境中使用 GatewayClient\Gateway 类的场景(如在 HTTP 控制器、定时任务中向客户端推送消息)。

原理

使用场景

┌──────────────────┐
│   HTTP API 服务   │ ← 收到 REST 请求
│  (独立进程/服务)   │
│                  │
│  sdk.SendToUID("user123", msg)
│       ↓                         
│  GatewaySDK ──→ Register ──→ 获取 Gateway 地址
│       │                         
│       └──→ Gateway-1 (直连 TCP)
│       └──→ Gateway-2 (直连 TCP)
└──────────────────┘

gateway_api 包的区别:

gateway_api gateway_sdk
运行环境 Worker 进程内部 任意外部进程
Gateway 地址来源 通过 BusinessWorker 自行连接 Register 获取
连接类型 复用 Worker 连接 + 独立查询池 全部独立连接
认证方式 通过 Worker 已认证 CmdGatewayClientConnect

连接管理

API 方法

方法 说明
SendToClient(clientID, message) 向指定客户端发送
SendToAll(message) 广播
SendToUID(uid, message) 向 UID 发送
SendToGroup(group, message) 向分组发送
BindUID(clientID, uid) 绑定 UID
UnbindUID(clientID, uid) 解绑 UID
JoinGroup(clientID, group) 加入分组
LeaveGroup(clientID, group) 离开分组
Ungroup(group) 解散分组
CloseClient(clientID, message) 踢出客户端
DestroyClient(clientID) 销毁连接
SetSession(clientID, session) 设置 session
UpdateSession(clientID, session) 更新 session
GetSession(clientID) 获取 session
IsOnline(clientID) 判断是否在线
IsUidOnline(uid) UID 是否在线
GetAllClientCount() 在线总数
GetClientCountByGroup(group) 分组在线数
GetAllClientIdList() 全部 client_id
GetClientIdByUid(uid) UID → client_id
GetUidByClientId(clientID) client_id → UID
GetAllUidList() 全部在线 UID
GetAllGroupIdList() 全部在线分组

使用示例

sdk := gateway_sdk.New(
    []string{"127.0.0.1:1236"},  // Register 地址
    "your-secret-key",
)
defer sdk.Close()

// 向某个用户推送消息
sdk.SendToUID("user123", []byte(`{"type":"notification","msg":"hello"}`))

// 检查用户是否在线
online, _ := sdk.IsOnline(clientID)