Azure Web PubSub の基本的な概念
Azure Web PubSub サービスは、リアルタイム メッセージング Web アプリを作成するのに役立ちます。 クライアントによるサービスへの接続には標準の WebSocket プロトコルが使用され、これらのクライアントを管理できるように、サービスにより REST API と SDK が公開されます。
条件
サービスで使用される重要な用語を次に示します。
接続: クライアントまたはクライアント接続とも呼ばれる接続は、クライアントと Web PubSub サービスの間の論理的な関係です。 "接続" を介して、クライアントとサービスは一連のステートフルな対話を行います。 異なるプロトコルを使用する接続は、動作が異なる場合があります。たとえば、ネットワーク接続の期間に制限される接続と、クライアントとサービス間の連続する複数のネットワーク接続にまたがって拡張できるものです。
ハブ: ハブは、一連のクライアント接続の論理的な概念です。 通常、"チャット" ハブや "通知" ハブなど、1 つのシナリオに 1 つのハブを使います。 クライアント接続の接続時には、1 つのハブに接続し、その有効期間中はそのハブに属します。 クライアント接続がハブに接続すると、ハブが存在します。 異なるアプリケーションでは、異なるハブ名を使用して、1 つの Azure Web PubSub サービスを共有できます。 ハブの数に厳密な制限はありませんが、ハブはグループと比較してより多くのサービス負荷を消費します。 動的に生成するのではなく、事前に定義されたハブ セットを使用することをお勧めします。
グループ: グループはハブへの接続のサブセットです。 必要な場合はいつでも、クライアント接続をグループに追加したり、グループからクライアント接続を削除したりできます。 たとえば、クライアントがチャット ルームに参加したり、クライアントがチャット ルームを離れたりするときに、このチャット ルームをグループと見なすことができます。 クライアントは複数のグループに参加できます。また、1 つのグループに複数のクライアントを含めることもできます。 グループはグループ "セッション" のようなもので、グループセッションは誰かがグループに参加すると作成され、グループに誰もいなくなるとセッションは終了します。 グループに送信されたメッセージは、グループに接続されているすべてのクライアントに配信されます。
ユーザー: Web PubSub への接続を 1 人のユーザーに所属させることができます。 1 人のユーザーが複数のデバイスまたは複数のブラウザー タブに接続されている場合など、ユーザーが複数の接続を持つ場合があります。
メッセージ: クライアントが接続されている場合は、WebSocket 接続を介して、アップストリーム アプリケーションにメッセージを送信したり、アップストリーム アプリケーションからメッセージを受信したりできます。 メッセージはプレーンテキスト、バイナリ、または JSON 形式で指定でき、最大サイズは 1 MB です。
クライアント イベント: イベントは、クライアント接続のライフサイクル中に作成されます。 たとえば、シンプル WebSocket クライアント接続では、サービスへの接続が試みられるときに
connect
イベント、サービスに正常に接続したときにconnected
イベント、サービスにメッセージを送信するときにmessage
イベント、サービスから切断したときにdisconnected
イベントが作成されます。 クライアント イベントの詳細については、「クライアント プロトコル」セクションを参照してください。イベント ハンドラー: イベント ハンドラーには、クライアント イベントを処理するロジックが含まれています。 事前にポータルまたは Azure CLI から、サービスにイベント ハンドラーを登録して構成します。 詳細については、「イベント ハンドラー」セクションを参照してください。
イベント リスナー (プレビュー): イベント リスナーはクライアント イベントをリッスンするだけであり、応答によってクライアントの有効期間に干渉することはありません。 詳細は「イベント リスナー」セクションにあります。
サーバー: サーバーでは、クライアント イベントを処理したり、クライアント接続を管理したり、グループにメッセージを発行したりできます。 イベント ハンドラーもイベント リスナーもサーバー側と見なされます。 サーバーの詳細については、「サーバー プロトコル」セクションを参照してください。
重要
Hub
、Group
、UserId
は、クライアントを管理してメッセージを送信するときに重要になるロールです。 これらは、プレーン テキストとしてさまざまな REST API 呼び出しで必要となるパラメータになります。 そのため、これらのフィールドに機密情報を含めないでください。 たとえば、漏洩リスクが高い資格情報やベアラー トークンなどです。
ワークフロー
サービスを使用する一般的なワークフローを次に示します。
上のワークフロー グラフに示されているように:
"クライアント" は、WebSocket トランスポートを使用してサービスのハブに接続します。 クライアントが使用しているプロトコルに応じて、サービスは、構成済みのアップストリーム (サーバー) にメッセージを転送することや、メッセージを独自に処理してクライアントが pub/sub を直接実行できるようにすることができます。 詳細については、「クライアント プロトコル」を参照してください。
サービスは異なるクライアント イベントで CloudEvents プロトコル を使用してサーバーを呼び出します。 CloudEvents は、Cloud Native Computing Foundation (CNCF) によってホストされるイベントの構造とメタデータ記述の標準化されたプロトコルに依存しない定義です。 詳細については、「サーバー プロトコル」を参照してください。
サーバーは、REST API を使用してサービスを呼び出し、クライアントにメッセージを送信したり、接続されているクライアントを管理したりできます。 詳細については、「サーバー プロトコル」を参照してください