gpt4 book ai didi

c# - Protobuf 解码任意消息。 Protobuf 消息多态性

转载 作者:行者123 更新时间:2023-12-02 11:25:11 38 4
gpt4 key购买 nike

有一个通过 UDP 接受消息的 Go 服务器。使用这种设计,它只能扫描一种特定类型的实体,world.Entity .

    for {
buf := make([]byte, 1024)
n, addr, err := pc.ReadFrom(buf)
if err != nil {
log.Println(err)
continue
}

packet := &service.Packet{}
err = proto.Unmarshal(buf[:n], packet)
if err != nil {
log.Println(err)
continue
}

log.Println(packet)

go serve(pc, addr, buf[:n])
}
如何以允许发送不同类型消息的方式更改设计?原因是让这个 UDP 服务器像 REST API 一样工作。说有一个 world.Packet message 由一个枚举字段和另一个可以包含不同类型消息的字段组成。服务器检查枚举并根据它尝试解码消息,该消息可以是多种类型。 Protobuf 中是否有工具可以使这成为可能?
我意识到这不是唯一的解决方案。一种更简单(但更冗长)的方法是为不同的“端点”(具有不同枚举字段的消息)制作不同类型的消息。还有其他解决方案吗?你认为哪一个是最好的?

最佳答案

在 protobuf 中,查看 oneof .使用带有 oneof 的单个/公共(public)外部消息字段,您可以自动处理所有预期的内部类型。一些 protobuf 实现可以将其表示为多态,尽管这不是默认体验。

关于c# - Protobuf 解码任意消息。 Protobuf 消息多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64252658/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com