Protocol

    One message contains:

    • Header: 4 bytes
    • Message ID: 8 bytes
    • total size: 4 bytes, doesn't contain size of header and itself, uint32
    • servicePath: UTF-8 string
    • size of serviceMethod: 4 bytes, uint32
    • serviceMethod: UTF-8 string
    • metadata: format: key1 string size value1 string, can contains multipl e=key, value
    • size of playload: 4 bytes, uint32
    • playload: slice of byte
      #4 + #6 + #8 + must be equal to #3.

    servicePathserviceMethodkey and value in metadata must be UTF-8 string.

    rpcx uses size of an element + format to define one element. It is like TLVbut rpcx doesn't use Type because Type of those elements are UTF-8 string.

    Use BigEndian for size (integer type, int64, uint32, etc.)

    1、The first byte must be 0x08. It is a magic number.

    2、The second byte is version. Current version is 0.

    3、MessageType can be: 0: Request 1: Response

    4、Heartbeat: bool. This message is heartbeat message or not

    6、CompressType: 0: don't compress 1: Gzip

    7、MessageStatusType: indicates response is an error or a normal response 0: Normal 1: Error

    8、SerializeType 0: use raw bytes 1: JSON 2: Protobuf 3: MessagePack

    If one service fails to handle requests, it can return an error. It sets MessageStatusType of response is 1 (ERROR) and sets the error message in metadata of the response. The key for the error is rpcx_error, and the value is error message.