2015-01-04 74 views
0

Java客户端根据该骨架构造一个消息:是否可以在protobuf-csharp-port中检测消息类型?

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类有很多不必要的字段 - 对于心跳操作。

问:

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

回答

1

是否有无论如何我可以知道这是一个MSG消息或“心跳”消息?

编号协议缓冲区消息不包含任何这样的类型信息。通常情况下,这种方式的“包装”类型包含您要发送的每个讯息的字段可能。您理想情况下希望将其表示为oneof,但我的端口不支持(还)。

开销很小 - 但它会是协议的变化,所以您需要考虑任何现有的服务器等。

相关问题