是否可以在protobuf-csharp-port中检测消息类型?

时间:2015-01-04 08:45:14

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

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是从套接字读取的字节数组。

但现在我遇到客户端需要发送“Heartbeat”消息(另一个消息)以检查服务器是否存活的情况。 (服务器应该回复:“是的,我还活着”

当然,我可以在MSG课程中添加另一个字段。但我不想,因为MSG类有很多不必要的字段 - 用于心跳操作。

问题:

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

1 个答案:

答案 0 :(得分:1)

  

无论如何,我知道这是MSG消息还是" Heartbeat"消息?

没有。协议缓冲消息不包含任何此类类型信息。通常情况下,这是一个"包装"为可能想要发送的每封邮件键入一个字段。理想情况下,您希望将其表示为oneof,但我的端口尚不支持(尚未)。

开销很小 - 当然,这将是协议更改,因此您需要考虑任何现有服务器等。