假设我有一个客户端想要(同时)向服务器发送两个大请求。
假设第一个有效载荷是“ABCD”,第二个有效载荷是“WXYZ”。
第一个请求的第一个块有 messageID=1 和 token=0x1 有效载荷“AB”,
第二个请求的第一个块有 messageID=2 和 token=0x2 有效载荷“WX”,
第一个请求的第二个块有 messageID=3 和 token=0x3 有效载荷“CD”,
第二个请求的第二个块具有 messageID=4 和 token=0x4 有效负载“YZ”。
你可以看到我要去哪里。如果每个请求的 messageID 和 token 都不同,并且它们没有按照连续的顺序排列,那么服务器应该如何连接正确的块?
这是一个序列图:
CLIENT SERVER
| |
| CON [MID=1,TOK=1], POST, /foo, 1:0/1/128, "AB" ------> |
| |
| <------ ACK [MID=1,TOK=1], 2.31 Continue, 1:0/1/128 |
| |
| CON [MID=2,TOK=2], POST, /foo, 1:0/1/128, "WX" ------> |
| |
| <------ ACK [MID=2,TOK=2], 2.31 Continue, 1:0/1/128 |
| |
| CON [MID=3,TOK=3], POST, /foo, 1:1/0/128, "CD" ------> |
| |
| <------ ACK [MID=3,TOK=3], 2.01 Created, 1:1/0/128 |
| |
| CON [MID=4,TOK=4], POST, /foo, 1:1/0/128, "YZ" ------> |
| |
| <------ ACK [MID=4,TOK=4], 2.01 Created, 1:1/0/128 |
问题出现在消息 3 上:服务器现在有两个不完整的有效负载,它如何可靠地将第三个请求映射到正确的有效负载?它怎么知道有效载荷应该是“ABCD”而不是“WXCD”?
分块传输的规范仅说明以下内容:
作为对代币的一般性评论,本文档中没有提及代币,因为区块传输处理代币就像任何其他 CoAP 交换一样。像往常一样,客户可以根据自己的喜好自由选择每个交易所的代币。