websocket - 如何使用 golang websockets 解码多种消息类型?

标签 websocket go

我有一个使用(相对)标准的围棋程序 go.net/websocket‎图书馆。我正在尝试接收和解码来自网页的消息,该网页对每种类型的消息具有不同的结构,即

{type: "messagetype", msg: { /* structure different for each message type */ } }

有什么方法可以对消息进行“部分”解码,仅在继续将实际消息解码为 go 结构之前检查 type 字段?

这是否需要编写自定义 Codec,即 JSON,将消息本身委托(delegate)给 JSON 编解码器?

最佳答案

使用json.RawMessage延迟解码,例如

struct {
    type string
    msg  json.RawMessage
}

json.RawMessage[]byte 的别名,您可以根据需要进一步解码。

关于websocket - 如何使用 golang websockets 解码多种消息类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23053563/

相关文章:

c# - 用 C# 编写 WebSocket 服务器

reflection - 反射(reflect) []byte 的值

google-app-engine - 在 App Engine 上的 Go 中建模 N 到 N 关联

linux - Bash - 终端错误 : "-bash: export: ` GOPATH~/usr/go': not a valid identifier"

go - 如何解析文本并将其格式化以将其作为 json 数据发送

javascript - HTML 5 中的实时音频流播放器

node.js - Websocket 在使用 AWS ELB 的连接 Node 服务器空闲 60 秒后关闭

reactjs - 在 React 应用程序中通过 laravel-echo 创建和加入 websocket

php - Ratchet PHP Websocket 库工作正常,但运行几天后导致 HTTP 代码 503 服务不可用

postgresql - GORM 数据库中的自动迁移将不需要的字段添加到 SQL 表