2 つの大きな要求をサーバーに (同時に) 送信したいクライアントがあるとします。
最初のペイロードが「ABCD」で、2 番目のペイロードが「WXYZ」であるとします。
最初のリクエストの最初のブロックは messageID=1 で token=0x1、ペイロードは "AB" です。
2 番目のリクエストの最初のブロックは messageID=2 で token=0x2、ペイロードは「WX」です。
最初のリクエストの 2 番目のブロックには、メッセージ ID=3 とトークン=0x3 があり、ペイロードは「CD」です。
2 番目のリクエストの 2 番目のブロックには、メッセージ ID=4 とトークン=0x4 があり、ペイロードは「YZ」です。
これで私がどこに向かっているのかがわかります。リクエストごとに messageID とトークンが異なり、それらが連続した順序に従っていない場合、サーバーはどのようにして正しいブロックを連結することになっているのでしょうか?
シーケンス図は次のとおりです。
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 で発生します。サーバーには 2 つの不完全なペイロードがあります。3 番目の要求を正しいペイロードに確実にマップするにはどうすればよいですか? ペイロードが「WXCD」ではなく「ABCD」であることをどのように知るのでしょうか?
ブロック単位転送の仕様には、次のように記載されています。
トークンに関する一般的なコメントとして、ブロック単位の転送は他の CoAP 交換と同様にトークンを処理するため、このドキュメントではトークンについて他に言及していません。いつものように、クライアントは好きなように各取引所のトークンを自由に選択できます。