go - Gorilla websockets,一个事件中的多个消息
问题描述
我正在使用来自 gorilla websockets 的聊天应用程序示例,但是我有一个问题,有时,当后端需要向客户端发送两条不同的消息时,它们只发送一个消息事件,这对我不利,因为 JSON.parse将无法从一个字符串中解析 2 个 json。我可以按换行符进行拆分并从消息中获取每个 json,但我不希望这样做。
如果我在后端设置超时,一切正常。
我可以做些什么来防止这种情况吗?如果不是,你能解释一下为什么吗?
这是聊天示例: https ://github.com/gorilla/websocket/tree/master/examples/chat
这是我广播 2 条消息的代码:
if err == nil {
c.SendMessageWithOrders(DB)
data := models.EventSuccess{
Event: utils.EventOrdersCreateSuccess,
}
toReturnBytes, err := json.Marshal(data)
if err == nil {
toReturn := BroadcastOne{
ID: c.ID,
Message: toReturnBytes,
}
NewHub.broadcastOne <- &toReturn
}
}
c.SendMessageWithOrders(DB)
正在NewHub.broadcastOne <- &toReturn
使用不同的数据
解决方案
client.go中的以下代码通过将排队的聊天消息作为单个 WebSocket 消息发送来减少通过网络发送的数据量:
n := len(c.send)
for i := 0; i < n; i++ {
w.Write(newline)
w.Write(<-c.send)
}
通过从示例中删除代码来解决问题。不需要优化。
推荐阅读
- svg - 在运行时以角度 5 将点击事件绑定到 svg 路径的集合
- c++ - 在整数指针与字符指针的情况下悬空指针
- python-3.x - 关闭 HTTP 代理服务器
- c - 在C的循环语句中循环和替换变量的值?
- apache-spark - 如何创建一个基于多个字段链接行的 ID
- php - api-instagram---很长一段时间得到这个错误请指导
- python - 用 SymPy 计算任意向量的散度
- mysql - MySql:如果字段为空,则在 INNER JOIN 中获取 MIN 记录,或更改条件
- java - 如何解析没有数组名的 JSON 数据?
- python - 查找目录中具有特定扩展名的文件的总大小?