NixMsg Go SDK
模块路径:git.asio.asia/nixevol/NixMsg/sdk/go,导入包名 nixmsg。
安装
# 公共代理访问不到 git.asio.asia 时:
# go env -w GOPRIVATE=git.asio.asia
go get git.asio.asia/nixevol/NixMsg/sdk/go@v0.1.0
版本标签带目录前缀:sdk/go/v0.1.0(由发布阶段打标,开发期可直接 replace 到本地仓库)。
最小示例
c := nixmsg.New()
c.OnSession(func(tok string) { /* 应用自行保存 */ })
c.OnMessage(func(msg nixmsg.Message) error {
fmt.Println(msg.From, msg.Body.Data)
return nil
})
ctx := context.Background()
_ = c.Connect(ctx, "ws://127.0.0.1:7443/mqtt", "device-1",
nixmsg.Credential{Password: "secret"}, nixmsg.Options{})
delay := time.Duration(0)
_, _ = c.Send(ctx, nixmsg.Target{Kind: "endpoint", ID: "device-2"},
nixmsg.Body{Enc: "utf8", Data: "hello"}, nixmsg.SendOptions{Delay: &delay})
_ = c.Close()
静态注册:
res, err := nixmsg.Register(ctx, "ws://127.0.0.1:7443/mqtt", "reg-code",
nixmsg.RegisterOptions{ID: "device-1", LoginPassword: "secret", Name: "门口"})
行为约定
四种 SDK 同一套对外语义,详见仓库 docs/DEVELOPMENT.md 第 9 节附录「SDK 行为约定」。要点:
- 首次连接默认 30 秒内未握手则停止重连,返回
not_connected;Client 可再次Connect。 - 顶号原因一律
taken_over;DISCONNECT0x8B可重试;CONNECT 不带 Receive Maximum;心跳默认 30 秒。 - 重连退避只维护一个计数 n:第 n 次等待
min(1s×2^(n-1), 30s)×随机(0.7,1.3)。仅Connect后第一次可不等待;断线后首次重连也约 1 秒;在线不足 60 秒断开则 n+1,稳定 60 秒后断开 n=1。 rate_limited与断线重交:每次重新生成rid并重新序列化;消息id、正文、send_at_ms不变。Logout请求失败返回给应用;本地仍停止重连、清空令牌、结束队列并发offline。- 时长与时间戳用 64 位整数。
sendAt与delay同时给时本地bad_request。停止重连后再Send立即失败。 - 取消尚未发出的条目即出队;已发出的返回
result_unknown,应用应以同一消息号重试。
许可证
见 LICENSE(专有)。