所以我目前正在探索一些通过MQTT传输数据的有效方法。 JSON对我来说太大了。所以我可以跨越protobuf,这似乎适合用例。
但我遇到的问题是MQTT没有办法告诉我消息的来源。所以例如,如果我收到一条消息,我无法判断它是来自源A还是源B,在某些情况下这不是问题,但在我的情况下,这些有不同的数据,所以我不知道我的模型是什么必须用来反序列化。
我正在使用protobuf的C#实现。如果我强制它们有一个共同的字段,是否有某种方法可以部分反序列化一条消息? (messageType字段)。然后能够正确地反序列化整个消息。
感谢任何帮助。
答案 0 :(得分:1)
MQTT没有办法告诉我消息来自哪里
当然可以。这是消息主题的目的。您将发布sourceA/messageTypeX
或sourceB/messageTypeY
等主题。
部分反序列化意味着某种继承(所有的消息类型都实现了一个公共字段),而不是protobuf的设计方式。
不要去寻找类似于类继承的工具,但协议缓冲区不会这样做。
https://developers.google.com/protocol-buffers/docs/csharptutorial
答案 1 :(得分:0)
对于以后进来的人: 您的第一个路径应该是在主题中包括源和消息类型的方法。就像@Zdenek在上面说的那样。 但是,在需要进行某种类型的部分反序列化的情况下(尤其是在proto 3上),可以使用仅包含要使用的字段的消息结构(具有完全相同的数字标识符)来实现。 参见Protobuf lazy decoding of sub message