title: multiple different protobuf messages in a socket
body: <p>I use protobuf with my c++ server. But I have a problem with multiple different protobuf messages in a socket
  I define many proto messages, such as</p>
  
  <pre><code>message SdkHGetRet {
    required int32 opcode = 1;
    required bytes value = 2;
  }
  
  message SdkHPut {
    required bytes table = 1;
    required bytes hname = 2;
    required bytes key = 3;
    required bytes value = 4;
    optional int32 writesrc = 5 [default = 0];
  }
  
  message SdkSet {
    required bytes table = 1;
    required bytes key = 2;
    required bytes value = 3;
    optional int32 writesrc = 4 [default = 0];
  }
  
  message SdkSetRet {
    required bool status = 1;
    optional string master = 2;
  }
  
  message SdkInvalidOperation {
    required int32 what = 1;
    required bytes why = 2;
  }
  ....
  </code></pre>
  
  <p>So every time I send the message by socket, I will add 8 bytes, 4 for the total socket len, 4 for the opcode, opcode mean the message type.</p>
  
  <p>So in the server side, I receive the message, I read the first 4 byte, and I got the message's length, then I will read another 4 bytes to get the message's type, at last I read the message's length bytes. Then I will use message type to method map ( such as 404 => "sdkset", 405 => "sdksetret") to decode the message.</p>
  
  <p>I find this way work well, but I wonder is there any elegance way to identify the message without the 4 byte message type.
  I have read the message history, one method is add the entire message in a big message, like this way</p>
  
  <pre><code>message BigMessage
  {
  enum Type { sdkset = 0, sdksetred = 1}
  require Type t = 1,
  optional  string key = 2,
  ...
  }
  </code></pre>
  
  <p>Since I have more than 40 types of message, I think this way may affect performance, and in my opinion, this way looks ugly.</p>
  
  <p>So can you give me any good suggestion..</p>