【发布时间】:2023-04-03 14:35:01
【问题描述】:
我们正在通过golang+gin+json+gorilla websocket构建一个websocket服务器,将消息从服务器端推送到浏览器。
我们计划为前端提供一些订阅命令,这意味着来自服务器端的消息将发送给订阅目标主题的用户。
我的困惑是我们是否需要在这里添加 Ack 机制?例如,当客户端订阅一个主题时,服务器保存了这个映射:用户 --> 主题。
服务器是否有必要为每个订阅请求向客户端发送响应(就像我们对 RPC 请求所做的那样)?以及如何做到这一点?下面是我的消费
type MsgHeader struct {
ReqId string `json: reqId`
Cmd string `json: cmd`
// either of "req" or "rsp"
// is it necessary to have this field???
Type string `json: type`
}
我的意思是应用程序级别的确认,就像我们对 RPC 请求所做的那样。对于 RPC 请求,即使响应本身为空,我们也会发送响应,例如:
type SubscriptionRsp struct {
Code int
Msg string
Data interface{}
}
【问题讨论】:
-
什么样的Ack?如果你的意思是简单的数据包/消息确认,那已经内置在 TCP 中,它是 websockets 的基础。
-
我的意思是应用程序级别的确认,就像我们为 RPC 请求所做的那样。对于 RPC 请求,即使 body 为 nil,我们也会发送响应,告诉用户订阅是否成功@HymnsForDisco
-
是否需要确认应用程序的特定功能取决于应用程序本身。客户端可能在没有确认的情况下正常运行。它可能不能,或者不应该。这完全取决于服务和客户端的设计方式。
标签: go websocket gorilla go-gin