20.6. Hot Rod プロトコル
以下の記事では、カスタム TCP クライアント/サーバーホットーティングプロトコルの各バージョンに関する詳細情報を説明します。
- hotgitops Protocol 1.0
- hotgitops Protocol 1.1
- hotgitops Protocol 1.2
- hotgitops Protocol 1.3
- hotgitops Protocol 2.0
- hotgitops Protocol 2.1
- hotgitops Protocol 2.2
- hotgitops Protocol 2.3
- hotgitops Protocol 2.4
- hotgitops Protocol 2.5
- hotgitops Protocol 2.6
- hotgitops Protocol 2.7
- hotgitops Protocol 2.8
- hotgitops Protocol 2.9
20.6.1. hotgitops Protocol 1.0 リンクのコピーリンクがクリップボードにコピーされました!
このバージョンのプロトコルは Infinispan 4.1.0.Final 以降実装されます。
キーと値はすべて送信され、バイトアレイとして保存されます。hotgitops では、そのタイプに関しては想定されていません。
その他のタイプについての明確化:
vInt: Variable-length 整数は圧縮された正の整数として定義され、各バイトの上位ビットがより多くのバイトを読み取る必要があるかどうかを示します。7 つのビットが大きくなると、整数値に大幅なビットが高まるため、デコードが効率的になります。したがって、ゼロから 127 までの値は 1 バイトに保存され、128 から 16,383 の値は 2 バイトに保存されます。
Expand 値最初のバイト2 バイト3 バイト000000000100000001200000010…12701111111128100000000000000112910000001000000011301000001000000001…16,383111111110111111116,38410000000100000000000000116,385100000011000000000000001…- 署名済み vInt: 上記の vInt は負の値をエンコードすることもできますが、終了値を小さくしても常に最大サイズ(5 バイト)を使用します。負の値のペイロードも小さくなるべく、署名された vInt は vInt エンコーディングに加えて ZigZag エンコーディングを使用します。詳細は、こちらを参照してください。
- VLong: vInt と同様の未署名の変数長の長い値を参照し、長い値に適用されます。1 バイトから 9 バイトの長さ。
- string : 文字列は常に UTF-8 エンコーディングを使用して表されます。
20.6.1.1. リクエストヘッダー リンクのコピーリンクがクリップボードにコピーされました!
リクエストのヘッダーは以下で構成されています。
| フィールド名 | サイズ | 値 |
|---|---|---|
| magic | 1 バイト | 0xA0 = request |
| メッセージ ID | vLong | 応答にコピーされるメッセージの ID。これにより、Hot336 クライアントが非同期的にプロトコルを実装できます。 |
| Version | 1 バイト | hotgitops サーバーバージョン。この場合、これは 10 です。 |
| opcode | 1 バイト |
Request operation code: |
| キャッシュ名の長さ | vInt | キャッシュ名の長さ。渡された長さが 0(キャッシュ名なし)の場合、操作はデフォルトのキャッシュと対話します。 |
| キャッシュ名 | string | 動作させるキャッシュの名前。この名前は、Red Hat Data Grid 設定ファイルの事前に定義されたキャッシュの名前と一致している必要があります。 |
| Flags | vInt |
システムに渡されるフラグを表す変数長番号。各フラグはビットで表されます。このフィールドは変数の長さとして送信されるため、バイトで最も大きなビットを使用して、より多くのバイトを読み取る必要があるかどうかを判断するため、このビットはフラグを表します。このモデルを使用すると、フラグを短いスペースに統合できます。各フラグの現在の値は以下の通りです。 |
| クライアントのインテリジェンス | 1 バイト |
このバイトヒントは、クライアント機能のサーバーをヒントします。 |
| トポロジー ID | vInt | このフィールドは、クライアントの最後の既知のビューを表します。基本的なクライアントは、このフィールドには 0 のみを送信します。トポロジー対応または hash-distribution 対応のクライアントは、現在のビュー ID でサーバーから応答を受け取るまで 0 を送信します。その後、応答で新しいビュー ID を受け取るまで、ビュー ID を送信する必要があります。 |
| トランザクションタイプ | 1 バイト |
これは、以下のよく知られたトランザクションタイプの 1 つが含まれる 1 バイトフィールドです(このバージョンのプロトコルでは、サポートされる唯一のトランザクションタイプは 0)。 |
| トランザクション ID | バイト配列 | この呼び出しに関連するトランザクションを一意に識別するバイトアレイ。その長さはトランザクションタイプにより決定されます。トランザクションタイプが 0 の場合は、トランザクション ID は存在しません。 |
20.6.1.2. レスポンスヘッダー リンクのコピーリンクがクリップボードにコピーされました!
応答のヘッダーは以下で構成されています。
| フィールド名 | サイズ | 値 |
|---|---|---|
| magic | 1 バイト | 0xA1 = response |
| メッセージ ID | vLong | メッセージの ID。応答が送信されるリクエストと一致します。 |
| opcode | 1 バイト |
response operation code: |
| ステータス | 1 バイト |
status of the response, possible values: |
| トポロジー変更マーカー | string | これは、応答の前にトポロジーの変更情報が含まれるかどうかを示すマーカーバイトです。トポロジーが変更されないと、このバイトの内容は 0 になります。トポロジーが変更されると、その内容は 1 になります。 |
0x8 … で始まる例外のステータス応答は、エラーメッセージの長さ(vInt として)およびエラーメッセージ自体を String として続きます。
20.6.1.3. トポロジー変更ヘッダー リンクのコピーリンクがクリップボードにコピーされました!
以下のセクションでは、クラスターまたはビューのフォーマットが変更されている場合に、応答ヘッダーがトポロジー対応またはハッシュディストリビューション対応のクライアントを検索する方法を説明します。現在のトポロジー ID とクライアントが送信された 1 つに基づいて新しいトポロジーを送信するかどうかを決定するサーバーであることに注意してください。これが異なる場合は、新しいトポロジーを送り返します。
20.6.1.4. Topology-Aware クライアントトポロジー変更ヘッダー リンクのコピーリンクがクリップボードにコピーされました!
これは、トポロジーの変更が返信される際に応答ヘッダーとして受信されるトポロジー対応のクライアントです。
| フィールド名 | サイズ | 値 |
|---|---|---|
| トポロジー変更マーカーのある応答ヘッダー | variable | 先のセクションを参照してください。 |
| トポロジー ID | vInt | トポロジー ID |
| トポロジーの num サーバー | vInt | クラスター内で稼働している Hotでサーバーの数。これは、これらのノードの一部のみが HotTEMPLATES サーバーを実行している場合に、クラスター全体のサブセットになる可能性があります。 |
| M1: ホスト/IP 長 | vInt | Hotgitops クライアントがアクセスするために使用できる各クラスターメンバーのホスト名または IP アドレスの長さ。ここで変数の長さを使用すると、ホスト名、IPv4 アドレス、および IPv6 アドレスに対応できます。 |
| M1: ホスト/IP アドレス | string | Hot336 クライアントがアクセスに使用できる個別のクラスターメンバーのホスト名または IP アドレスが含まれる文字列。 |
| M1: ポート | 2 バイト(未署名) | Hotgitops クライアントがこのクラスターメンバーとの通信に使用できるポート。 |
| m2: ホスト/IP の長さ | vInt | |
| m2: ホスト/IP アドレス | string | |
| m2: ポート | 2 バイト(未署名) | |
| …etc |
20.6.1.5. Distribution-Aware クライアントトポロジー変更ヘッダー リンクのコピーリンクがクリップボードにコピーされました!
これは、トポロジーの変更が返信される際に応答ヘッダーとして受信される hash-distribution 対応のクライアントです。
| フィールド名 | サイズ | 値 |
|---|---|---|
| トポロジー変更マーカーのある応答ヘッダー | variable | 先のセクションを参照してください。 |
| トポロジー ID | vInt | トポロジー ID |
| num Key Owners | 2 バイト(未署名) | 各 Red Hat Data Grid 分散キーのコピーをグローバルに設定した数 |
| ハッシュ関数バージョン | 1 バイト | 使用中の特定のハッシュ関数を参照するハッシュ関数のバージョン。詳細は「 Hotgitops hash functions 」を参照してください。 |
| ハッシュスペースサイズ | vInt | ハッシュコード生成に関連するすべてのモジュールの Red Hat Data Grid によって使用されるモジュール。キーに正しいハッシュ計算を適用するには、クライアントでこの情報が必要になる可能性があります。 |
| トポロジーの num サーバー | vInt | クラスター内で稼働している Red Hat Data Grid Hotgitops サーバーの数。これは、これらのノードの一部のみが HotTEMPLATES サーバーを実行している場合に、クラスター全体のサブセットになる可能性があります。 |
| M1: ホスト/IP 長 | vInt | Hotgitops クライアントがアクセスするために使用できる各クラスターメンバーのホスト名または IP アドレスの長さ。ここで変数の長さを使用すると、ホスト名、IPv4 アドレス、および IPv6 アドレスに対応できます。 |
| M1: ホスト/IP アドレス | string | Hot336 クライアントがアクセスに使用できる個別のクラスターメンバーのホスト名または IP アドレスが含まれる文字列。 |
| M1: ポート | 2 バイト(未署名) | Hotgitops クライアントがこのクラスターメンバーと組み合わせるために使用できるポート。 |
| M1: Hashcode | 4 バイト | ユーザーが CSA を適用しているクラスターメンバーがどのクラスターメンバーであるかをインデントできるクラスターメンバーのハッシュコードを表す 32 ビット整数。 |
| m2: ホスト/IP の長さ | vInt | |
| m2: ホスト/IP アドレス | string | |
| m2: ポート | 2 バイト(未署名) | |
| m2: Hashcode | 4 バイト | |
| …etc |
ハッシュヘッダーはサーバーで使用される一貫性のあるハッシュアルゴリズムに依存し、キャッシュが対話する要素であるため、hash-distribution 対応ヘッダーは特定のキャッシュをターゲットとする操作にのみ返すことができることに注意してください。現在 ping コマンドはキャッシュをターゲットにしません( ISPN-424に従って変更されます)。ハッシュトポロジー対応のクライアント設定で ping コマンドを呼び出すと、「Num Key Owners」、「Hash Function Version」、「Hash Function Version」、「Hash Function Version」、個々のホストのハッシュコードはすべて 0 に設定されたハッシュディストリビューション対応ヘッダーを返します。また、ディストリビューションで設定されていないキャッシュを対象とする hash-topology 対応のクライアント設定を持つ操作への応答として、このタイプのヘッダーも返されます。
20.6.1.6. 操作 リンクのコピーリンクがクリップボードにコピーされました!
get(0x03)/Remove(0x0B)/ContainsKey(0x0F)/GetWithVersion(0x11)
一般的な要求形式:
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 要求ヘッダー |
| キーの長さ | vInt | キーの長さ。vint のサイズは最大 5 バイトで、理論では Integer.MAX_VALUE よりも大きな数値を生成することができます。ただし、Java では Integer.MAX_VALUE を超える単一のアレイを作成できないため、プロトコルは vint アレイの長さを Integer.MAX_VALUE に制限します。 |
| キー | バイト配列 | 値が要求されているキーが含まれるバイトアレイ。 |
応答を取得します(0x04)。
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success(キーの取得の場合) |
| 値の長さ | vInt | 成功した場合、値の長さ |
| 値 | バイト配列 | 成功した場合、要求された値。 |
応答を削除します(0x0C):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success(キーが削除された場合) |
| 以前の値の長さ | vInt | 以前の値フラグが要求で送信され、キーが削除されると、以前の値の長さが返されます。キーが存在しない場合は、値の長さは 0 になります。フラグが送信されていない場合、値の長さはありません。 |
| 以前の値 | バイト配列 | 以前の値フラグが要求で送信され、キーが削除された場合、以前の値。 |
ContainsKey 応答(0x10):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success, if key exists |
GetWithVersion response (0x12):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success(キーの取得の場合) |
| エントリーバージョン | 8 バイト | 既存のエントリーの変更の一意の値。このプロトコルは、entry_version 値が連続して行われるという義務はありません。更新ごとにキーレベルで一意となる必要があります。 |
| 値の長さ | vInt | 成功した場合、値の長さ |
| 値 | バイト配列 | 成功した場合、要求された値。 |
BulkGet
要求(0x19):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 要求ヘッダー |
| エントリー数 | vInt | サーバーが返す Red Hat Data Grid エントリーの最大数(entry == key + 関連付けられた値)。CacheLoader.load(int)をサポートするために必要です。0 の場合、すべてのエントリーが返されます(CacheLoader.loadAll()に必要)。 |
応答(0x20):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success, data follows |
| 詳細表示 | 1 バイト | 複数のエントリーをストリームから読み取る必要があるかどうかを表す 1 つのバイト。そのため、1 に設定すると、エントリーが後に続くことを意味しますが、0 に設定された場合はストリームの最後となり、他のエントリーは読み取られません。BulkGet の詳細は、こちらを参照してください。 |
| キー 1 長 | vInt | キーの長さ |
| キー 1 | バイト配列 | 取得されるキー |
| 値 1 の長さ | vInt | 値の長さ |
| 値 1 | バイト配列 | 取得した値 |
| 詳細表示 | 1 バイト | |
| キー 2 長 | vInt | |
| キー 2 | バイト配列 | |
| 値 2 の長さ | vInt | |
| 値 2 | バイト配列 | |
| … |
Put (0x01)/PutIfAbsent (0x05)/Replace (0x07)
一般的な要求形式:
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 要求ヘッダー |
| キーの長さ | vInt | キーの長さ。vint のサイズは最大 5 バイトで、理論では Integer.MAX_VALUE よりも大きな数値を生成することができます。ただし、Java では Integer.MAX_VALUE を超える単一のアレイを作成できないため、プロトコルは vint アレイの長さを Integer.MAX_VALUE に制限します。 |
| キー | バイト配列 | 値が要求されているキーが含まれるバイトアレイ。 |
| 有効期間 | vInt | エントリーの有効期間が許可される秒数。秒数が 30 日を超える場合、この秒数は UNIX 時間として扱われるため、1/1/1970 からの秒数を表します。0 に設定すると、ライフスパンは無制限になります。 |
| 最大 ID | vInt | キャッシュからエビクトされる前に、エントリーをアイドル状態でいられる秒数。0 の場合は、最大アイドル時間がありません。 |
| 値の長さ | vInt | 値の長さ |
| 値 | byte-array | 保存する値 |
応答を追加します(0x02)。
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success(保存されている場合) |
| 以前の値の長さ | vInt | 以前の値フラグが要求で送信され、キーが配置されている場合、以前の値の長さが返されます。キーが存在しない場合は、値の長さは 0 になります。フラグが送信されていない場合、値の長さはありません。 |
| 以前の値 | バイト配列 | 以前の値フラグが要求で送信され、キーが配置された場合、以前の値。 |
応答(0x08)を置き換えます。
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success(保存された場合は |
| 以前の値の長さ | vInt | リクエストで以前の値フラグを強制的に返すと、前の値の長さが返されます。キーが存在しない場合は、値の長さは 0 になります。フラグが送信されていない場合、値の長さはありません。 |
| 以前の値 | バイト配列 | リクエストで以前の値フラグが送信され、キーが置き換えられた場合に、以前の値が返されます。 |
PutIfAbsent 応答(0x06):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success(保存された場合は |
| 以前の値の長さ | vInt | リクエストで以前の値フラグを強制的に返すと、前の値の長さが返されます。キーが存在しない場合は、値の長さは 0 になります。フラグが送信されていない場合、値の長さはありません。 |
| 以前の値 | バイト配列 | リクエストで以前の値フラグが送信され、キーが置き換えられた場合に、以前の値が返されます。 |
ReplaceIfUnmodified
要求(0x09):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 要求ヘッダー |
| キーの長さ | vInt | キーの長さ。vint のサイズは最大 5 バイトで、理論では Integer.MAX_VALUE よりも大きな数値を生成することができます。ただし、Java では Integer.MAX_VALUE を超える単一のアレイを作成できないため、プロトコルは vint アレイの長さを Integer.MAX_VALUE に制限します。 |
| キー | バイト配列 | 値が要求されているキーが含まれるバイトアレイ。 |
| 有効期間 | vInt | エントリーの有効期間が許可される秒数。秒数が 30 日を超える場合、この秒数は UNIX 時間として扱われるため、1/1/1970 からの秒数を表します。0 に設定すると、ライフスパンは無制限になります。 |
| 最大 ID | vInt | キャッシュからエビクトされる前に、エントリーをアイドル状態でいられる秒数。0 の場合は、最大アイドル時間がありません。 |
| エントリーバージョン | 8 バイト | GetWithVersion 操作によって返される値を使用します。 |
| 値の長さ | vInt | 値の長さ |
| 値 | byte-array | 保存する値 |
応答(0x0A):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success, if replaced |
| 以前の値の長さ | vInt | リクエストで以前の値フラグを強制的に返すと、前の値の長さが返されます。キーが存在しない場合は、値の長さは 0 になります。フラグが送信されていない場合、値の長さはありません。 |
| 以前の値 | バイト配列 | リクエストで以前の値フラグが送信され、キーが置き換えられた場合に、以前の値が返されます。 |
RemoveIfUnmodified
要求(0x0D):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 要求ヘッダー |
| キーの長さ | vInt | キーの長さ。vint のサイズは最大 5 バイトで、理論では Integer.MAX_VALUE よりも大きな数値を生成することができます。ただし、Java では Integer.MAX_VALUE を超える単一のアレイを作成できないため、プロトコルは vint アレイの長さを Integer.MAX_VALUE に制限します。 |
| キー | バイト配列 | 値が要求されているキーが含まれるバイトアレイ。 |
| エントリーバージョン | 8 バイト | GetWithMetadata 操作によって返される値を使用します。 |
応答(0x0E):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success(削除されている場合) |
| 以前の値の長さ | vInt | リクエストで以前の値フラグを強制的に返すと、前の値の長さが返されます。キーが存在しない場合は、値の長さは 0 になります。フラグが送信されていない場合、値の長さはありません。 |
| 以前の値 | バイト配列 | 以前の値フラグが要求で送信され、キーが削除された場合、以前の値。 |
消去
要求(0x13):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 要求ヘッダー |
応答(0x14):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success(消去されている場合) |
PutAll
すべてのキー値エントリーをキャッシュに同時に配置する一括操作。
要求(0x2D):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 要求ヘッダー |
| 有効期間 | vInt | 提供されたエントリーが存続できる秒数。秒数が 30 日を超える場合、この秒数は UNIX 時間として扱われるため、1/1/1970 からの秒数を表します。0 に設定すると、ライフスパンは無制限になります。 |
| 最大 ID | vInt | キャッシュからエビクトされる前に、各エントリーをアイドル状態でいられる秒数。0 の場合は、最大アイドル時間がありません。 |
| エントリー数 | vInt | 挿入されるエントリーの数 |
| キー 1 長 | vInt | キーの長さ |
| キー 1 | バイト配列 | 取得されるキー |
| 値 1 の長さ | vInt | 値の長さ |
| 値 1 | バイト配列 | 取得した値 |
| キー 2 長 | vInt | |
| キー 2 | バイト配列 | |
| 値 2 の長さ | vInt | |
| 値 2 | バイト配列 | |
| … エントリー数に達するまで継続する |
応答(0x2E):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success(すべてが配置されている場合) |
GetAll
指定されたキーのセットにマップするすべてのエントリーを取得する一括操作。
要求(0x2F):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 要求ヘッダー |
| キー数 | vInt | エントリーを検索するキーの数 |
| キー 1 長 | vInt | キーの長さ |
| キー 1 | バイト配列 | 取得されるキー |
| キー 2 長 | vInt | |
| キー 2 | バイト配列 | |
| … キー数に達するまで継続される |
応答(0x30):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト | |
| エントリー数 | vInt | 返されるエントリーの数 |
| キー 1 長 | vInt | キーの長さ |
| キー 1 | バイト配列 | 取得されるキー |
| 値 1 の長さ | vInt | 値の長さ |
| 値 1 | バイト配列 | 取得した値 |
| キー 2 長 | vInt | |
| キー 2 | バイト配列 | |
| 値 2 の長さ | vInt | |
| 値 2 | バイト配列 | |
| … エントリー数に達するまで継続する |
0x00 = success。get returned sucessfully |
Stats
利用可能なすべての統計の概要を返します。統計で返される各統計では、名前と値はどちらも String UTF-8 形式で返されます。サポートされる統計は以下のとおりです。
| 名前 | 説明 |
|---|---|
| timeSinceStart | Hotgitops の開始からの秒数。 |
| currentNumberOfEntries | 「Hoting servers」サーバーに現在含まれるエントリーの数。 |
| totalNumberOfEntries | Hotgitops サーバーに保存されているエントリーの数。 |
| stores | put 操作の数。 |
| retrievals | get 操作の数。 |
| Hits | ヒット数。 |
| misses | get misses の数。 |
| removeHits | 削除ヒット数。 |
| removeMisses | 削除のミスの数。 |
要求(0x15):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 要求ヘッダー |
応答(0x16):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success(統計が取得された場合) |
| 統計数 | vInt | 返された個々の統計の数。 |
| 名前 1 の長さ | vInt | 名前付き統計の長さ。 |
| Name 1 | string | 統計名が含まれる文字列。 |
| 値 1 の長さ | vInt | value フィールドの長さ。 |
| 値 1 | string | 統計値が含まれる文字列。 |
| 名前 2 の長さ | vInt | |
| 名前 2 | string | |
| 値 2 の長さ | vInt | |
| 値 2 | 文字列 | |
| …etc |
Ping
サーバーが利用可能かどうかを確認するためのアプリケーションレベルの要求。
要求(0x17):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 要求ヘッダー |
応答(0x18):
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x00 = success(エラーがない場合) |
エラー処理
エラー応答(0x50)
| フィールド名 | サイズ | 値 |
|---|---|---|
| ヘッダー | variable | 応答ヘッダー |
| 応答のステータス | 1 バイト |
0x8x = エラー応答コード |
| エラーメッセージの長さ | vInt | エラーメッセージの長さ |
| エラーメッセージ | string | エラーメッセージ0x84 の場合、このエラーフィールドには Hot336 サーバーでサポートされる最新バージョンが含まれます。長さは合計本文の長さで定義されます。 |
複数取得操作
マルチget操作は、1 つのキーを要求せずにキーのセットを要求する get 操作の形式です。Hotgitops プロトコルにはこのような操作は含まれませんが、remote HotTEMPLATES クライアントは、個別の get リクエストパッシングまたはパイプのいずれかを使用して、このタイプの操作を簡単に実装できます。もう 1 つの可能性として、リモートクライアントが非同期またはノンブロッキング取得リクエストを使用することができます。たとえば、クライアントが N キーが必要な場合は、N async get requests を送信し、すべての応答を待つことができます。最後に、マルチットは一括取得操作と混同しないようにしてください。一括取得では、すべてまたは多数のキーが取得されますが、クライアントはどのキーを取得するかを認識しませんが、マルチget では、クライアントはどのキーを取得するかを定義します。
20.6.1.7. 例: 要求の変更 リンクのコピーリンクがクリップボードにコピーされました!
- コード化されたリクエスト
| Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| 8 | 0xA0 | 0x09 | 0x41 | 0x01 | 0x07 | 0x4D ('M') | 0x79 ('y') | 0x43 ('C') |
| 16 | 0x61 ('a') | 0x63 ('c') | 0x68 ('h') | 0x65 ('e') | 0x00 | 0x03 | 0x00 | 0x00 |
| 24 | 0x00 | 0x05 | 0x48 ('H') | 0x65 ('e') | 0x6C ('l') | 0x6C ('l') | 0x6F ('o') | 0x00 |
| 32 | 0x00 | 0x05 | 0x57 ('W') | 0x6F ('o') | 0x72 ('r') | 0x6C ('l') | 0x64 ('d') |
|
- フィールドの説明
| フィールド名 | 値 | フィールド名 | 値 |
|---|---|---|---|
| マジック(0) | 0xA0 | Message Id(1) | 0x09 |
| バージョン(2) | 0x41 | opcode(3) | 0x01 |
| キャッシュ名の長さ(4) | 0x07 | Cache name(5-11) | 'MyCache' |
| フラグ(12) | 0x00 | クライアントの Intelligence(13) | 0x03 |
| トポロジー ID(14) | 0x00 | トランザクションタイプ(15) | 0x00 |
| トランザクション ID(16) | 0x00 | キーフィールド長(17) | 0x05 |
| キー(18 - 22) | 'hello' | lifespan(23) | 0x00 |
| 最大アイドル時間(24) | 0x00 | 値フィールドの長さ(25) | 0x05 |
| 値(26-30) | 'World' |
- コード化された応答
| Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| 8 | 0xA1 | 0x09 | 0x01 | 0x00 | 0x00 |
|
|
|
- フィールドのプランニング
| フィールド名 | 値 | フィールド名 | 値 |
|---|---|---|---|
| マジック(0) | 0xA1 | Message Id(1) | 0x09 |
| opcode(2) | 0x01 | ステータス(3) | 0x00 |
| トポロジー変更マーカー(4) | 0x00 |
|