2015-01-04 100 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,但我的端口不支持(還)。

開銷很小 - 但它會是協議的變化,所以您需要考慮任何現有的服務器等。

相關問題