Files
go-omni/examples/websocketRPC/README.md

1.5 KiB
Raw Blame History

双向 RPC 与订阅恢复

从仓库根目录运行,无外部服务、数据库或凭证:

go run ./examples/websocketRPC
go test -race ./examples/websocketRPC

示例在本地随机端口启动 HTTP/1.1 WebSocket 服务,客户端与服务端协商 go-omni.rpc.v1。每条连接创建独立 Peer:客户端调用 double,服务端处理 identify 时反向调用客户端的 client.name。随后客户端恢复 updates 订阅,服务端通过进程内 Hub 广播 RPC 事件;完成取消订阅和关闭后,用新连接再次执行恢复。

每代输出包含 double=42、反向调用返回值、restored=1 和对应事件序号。两次连接之间保留的是本地期望订阅,不是历史事件。示例显式创建第二条连接,方便验证每代 Peer 和订阅恢复的责任边界;自动网络重连使用 ws.Client.Run 与 Prepare 创建新 Peer,再从 OnOpen 外等待 WaitReady 并恢复订阅。

示例的订阅授权只允许公开的 updates 主题。生产项目在握手 Prepare 验证身份,每次订阅/恢复时检查具体主题权限。服务器注册订阅路由时通过连接 ID 加入 Hub;JSON 中的 key 不自动构成授权。没有离线补发、自动重试业务调用或持久化投递。

关闭 Client/Server 都使用独立、有界 context 并检查错误。RPC 的 OnClose 回调纳入实际业务任务完成屏障,示例的包装保留了该回调。完整协议、配置和退出语义见 ws/rpc。