Azure Web PubSub の基本的な概念

Azure Web PubSub サービスは、リアルタイム メッセージング Web アプリを作成するのに役立ちます。 クライアントによるサービスへの接続には標準の WebSocket プロトコルが使用され、これらのクライアントを管理できるように、サービスにより REST API と SDK が公開されます。

条件

サービスで使用される重要な用語を次に示します。

  • 接続: 接続は、クライアントまたはクライアント接続とも呼ばれ、Web PubSub サービスに接続されている個々の WebSocket 接続を表します。 正常に接続されると、一意の接続 ID が Web PubSub サービスによってこの接続に割り当てられます。

  • ハブ: ハブは、一連のクライアント接続の論理的な概念です。 通常は、チャット ハブや通知ハブなど、1 つのシナリオに 1 つのハブを使用します。 クライアント接続の接続時には、1 つのハブに接続し、その有効期間中はそのハブに属します。 クライアント接続がハブに接続すると、ハブが存在します。 異なるアプリケーションでは、異なるハブ名を使用して、1 つの Azure Web PubSub サービスを共有できます。 ハブの数に厳密な制限はありませんが、ハブグループに比べてより多くのサービス負荷を消費します。 動的に生成するのではなく、事前に定義されたハブセットを作成することをお勧めします。

  • グループ: グループはハブへの接続のサブセットです。 必要な場合はいつでも、クライアント接続をグループに追加したり、グループからクライアント接続を削除したりできます。 たとえば、クライアントがチャット ルームに参加したり、クライアントがチャット ルームを離れたりするときに、このチャット ルームをグループと見なすことができます。 クライアントは複数のグループに参加できます。また、1 つのグループに複数のクライアントを含めることもできます。 グループはグループ "セッション" のようなもので、グループセッションは誰かがグループに参加すると作成され、グループに誰もいなくなるとセッションは終了します。 グループに送信されたメッセージは、グループに接続されているすべてのクライアントに配信されます。

  • ユーザー: Web PubSub への接続を 1 人のユーザーに所属させることができます。 1 人のユーザーが複数のデバイスまたは複数のブラウザー タブに接続されている場合など、ユーザーが複数の接続を持つ場合があります。

  • メッセージ: クライアントが接続されている場合は、WebSocket 接続を介して、アップストリーム アプリケーションにメッセージを送信したり、アップストリーム アプリケーションからメッセージを受信したりできます。 メッセージはプレーンテキスト、バイナリ、または JSON 形式で指定でき、最大サイズは 1 MB です。

  • クライアント接続ConnectionId: クライアントは /client エンドポイントに接続します。接続されると、サービスによって一意の connectionId がクライアント接続の一意の ID として生成されます。 その後、ユーザーはこの connectionId を使用してクライアント接続を管理できます。 詳細については、「クライアント プロトコル」セクションを参照してください。

  • クライアント イベント: イベントは、クライアント接続のライフサイクル中に作成されます。 たとえば、シンプル WebSocket クライアント接続では、サービスへの接続が試みられるときに connect イベント、サービスに正常に接続したときに connected イベント、サービスにメッセージを送信するときに message イベント、サービスから切断したときに disconnected イベントが作成されます。 クライアント イベントの詳細については、「クライアント プロトコル」セクションを参照してください。

  • イベント ハンドラー: イベント ハンドラーには、クライアント イベントを処理するロジックが含まれています。 事前にポータルまたは Azure CLI から、サービスにイベント ハンドラーを登録して構成します。 詳細については、「イベント ハンドラー」セクションを参照してください。

  • イベント リスナー (プレビュー): イベント リスナーはクライアント イベントをリッスンするだけであり、応答によってクライアントの有効期間に干渉することはありません。 詳細は「イベント リスナー」セクションにあります。

  • サーバー: サーバーでは、クライアント イベントを処理したり、クライアント接続を管理したり、グループにメッセージを発行したりできます。 イベント ハンドラーもイベント リスナーもサーバー側と見なされます。 サーバーの詳細については、「サーバー プロトコル」セクションを参照してください。

重要

HubGroupUserId は、クライアントを管理してメッセージを送信するときに重要になるロールです。 これらは、プレーン テキストとしてさまざまな REST API 呼び出しで必要となるパラメータになります。 そのため、これらのフィールドに機密情報を含めないでください。 たとえば、漏洩リスクが高い資格情報やベアラー トークンなどです。

ワークフロー

サービスを使用する一般的なワークフローを次に示します。

Diagram showing the Web PubSub service workflow.

上のワークフロー グラフに示されているように:

  1. クライアントは、WebSocket トランスポートを使用してサービス /client エンドポイントに接続します。 サービスは、すべての WebSocket フレームを、構成されているアップストリーム (サーバー) に転送します。 WebSocket 接続では、サーバーが処理する任意のカスタム サブプロトコルに接続することも、クライアントが pub/sub を直接実行できるようにするサービスでサポートされているサブプロトコル (例:json.webpubsub.azure.v1) に接続することもできます。 詳細については、「クライアント プロトコル」を参照してください。

  2. サービスは異なるクライアント イベントで CloudEvents プロトコル を使用してサーバーを呼び出します。 CloudEvents は、Cloud Native Computing Foundation (CNCF) によってホストされるイベントの構造とメタデータ記述の標準化されたプロトコルに依存しない定義です。 詳細については、「サーバー プロトコル」を参照してください。

  3. サーバーは、REST API を使用してサービスを呼び出し、クライアントにメッセージを送信したり、接続されているクライアントを管理したりできます。 詳細については、「サーバー プロトコル」を参照してください