跳到主要内容

JSON 协议

JSON 协议是默认的 hub 协议。每条消息是一个 JSON 对象,以 ASCII 记录分隔符 0x1E 结尾。

消息类型

type消息方向
1Invocation双向
2StreamItem双向
3Completion双向
4StreamInvocation双向
5CancelInvocation双向
6Ping双向
7Close双向
8Ack双向(状态化重连)
9Sequence双向(状态化重连)

帧形状

每条消息编码为一个 JSON 对象后跟 0x1E

{"type":1,"target":"Add","arguments":[40,2],"invocationId":"1"}\x1e

选择

connection = HubConnection(protocol="json") # 默认

握手声明协议:

{"protocol": "json", "version": 2}\x1e

协商到状态化重连时发送版本 2;否则发送版本 1,保证老服务器可用。

线上消息示例

调用:

{"type":1,"invocationId":"1","target":"Add","arguments":[40,2]}

StreamItem:

{"type":2,"invocationId":"1","item":0}

带结果的 Completion:

{"type":3,"invocationId":"1","result":42}

Ack:

{"type":8,"sequenceId":7}

Sequence:

{"type":9,"sequenceId":8}

解析器行为

  • 未知消息类型被忽略(向前兼容)。
  • 缺少必需属性抛 ProtocolError,对连接是致命的。
  • Completionerrorresult 属性互斥。
  • 0x1E 分隔解析是增量的、受大小限制(maximum_receive_message_size, 默认 32 KiB)。

参见