【问题标题】:Is it possible to detect message type in protobuf-csharp-port?是否可以在 protobuf-csharp-port 中检测消息类型?
【发布时间】:2015-01-04 16:47:49
【问题描述】:

一个java客户端根据这个骨架构造一个Message:

package tutorial;

option java_package = "com.example.sff.piki2";
option java_outer_classname = "MsgProtos";

message MSG {

 required string guid = 1; 
 required int32 MsgCode = 2;
 required int32 From = 3;  //sender
 ...

此消息被发送到 C# 程序(服务器端)。

服务器知道如何读取字节(第一个字节是要读取的字节数,代表后面消息的大小)。

这就是字节数组构造 MSG 的方式。

 MSG Msg = MSG.CreateBuilder().MergeFrom(buffer).Build();

其中 buffer 是从套接字读取的字节数组。

但现在我处于客户端需要发送“心跳”消息(另一个消息)以检查服务器是否处于活动状态的情况。 (服务器应该响应:“是的,我还活着”

当然,我可以在MSG 类中添加另一个字段。但我不想这样做,因为 MSG 类有很多不必要的字段 - 对于 Heartbeat 操作。

问题:

服务器读取 n 个字节。无论如何我可以知道这是MSG 消息还是“心跳”消息?

【问题讨论】:

    标签: c# protocol-buffers protobuf-csharp-port


    【解决方案1】:

    无论如何我可以知道这是一条 MSG 消息还是“心跳”消息?

    没有。协议缓冲区消息不包含任何此类类型信息。通常,解决此问题的方法是为您可能要发送的每条消息设置一个带有字段的“包装器”类型。理想情况下,您希望将其表示为 oneof,但我的端口不支持(目前)。

    开销很小 - 但当然会改变协议,因此您需要考虑任何现有的服务器等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多