Azure SignalR Service でのメッセージと接続

Azure SignalR Service の課金モデルは、接続の数とサービスからの送信メッセージの数に基づいています。 この記事では、メッセージと接続を定義する方法、および課金のためにそれらをカウントする方法について説明します。

メッセージ形式

Azure SignalR Service では、ASP.NET Core SignalR と同じ形式がサポートされます。JSONMessagePack です。

メッセージ サイズ

Azure SignalR Service メッセージには、次の制限が適用されます。

  • クライアント メッセージ:
    • 長いポーリングまたはサーバー側のイベントの場合、クライアントは 1 MB を超えるメッセージを送信できません。
    • サービスの WebSocket にはサイズ制限がありません。
    • アプリ サーバーは、クライアント メッセージのサイズの制限を設定できます。 既定値は 32 KB です。 詳細については、ASP.NET Core SignalR のセキュリティの考慮事項に関するページを参照してください。
    • サーバーレスの場合、メッセージ サイズはアップストリームの実装によって制限されますが、1 MB 未満をお勧めします。
  • サーバー メッセージ:
    • サーバー メッセージのサイズに制限はありませんが、16 MB 未満をお勧めします。
    • アプリ サーバーは、クライアント メッセージのサイズの制限を設定できます。 既定値は 32 KB です。 詳細については、ASP.NET Core SignalR のセキュリティの考慮事項に関するページを参照してください。
    • サーバーレス:
      • Rest API: メッセージ本文が 1 MB で、ヘッダーが 16 KB です。
      • WebSocket、管理 SDK 永続モードには制限はありませんが、16 MB 未満をお勧めします。

WebSocket クライアントでは、大きいメッセージはそれぞれ 2 KB 以下の小さなメッセージに分割され、個別のメッセージとして送信されます。 メッセージの分割と結合は SDK が処理します。 開発者が対処する必要はありません。

大きいメッセージでは、メッセージングのパフォーマンスに悪影響があります。 可能な限り小さいメッセージを使用し、各ユース ケース シナリオに最適なメッセージ サイズをテストして決定してください。

課金に対してメッセージがカウントされる方法

サービスに送信されるメッセージは受信メッセージであり、サービスから送信されるメッセージは送信メッセージです。 Azure SignalR Service からの送信メッセージのみが課金対象としてカウントされます。 クライアントとサーバー間の ping メッセージは無視されます。

2 KB を超えるメッセージは、各 2 KB の複数のメッセージとしてカウントされます。 Azure portal のメッセージ カウント グラフは、ハブあたり 100 件のメッセージごとに更新されます。

たとえば、1 つのアプリケーション サーバーと 3 つのクライアントがあるとします。

  • アプリケーション サーバーが、接続されているすべてのクライアントに 1 KB のメッセージをブロードキャストする場合、アプリケーション サーバーからサービスへのメッセージは、無料の受信メッセージと見なされます。 サービスからそれぞれのクライアントに送信される 3 つのメッセージは、送信メッセージであり、課金対象です。

  • "クライアント A" が、1 KB の受信メッセージを、アプリ サーバーを経由しないで "クライアント B" に送信する場合、メッセージは無料の受信メッセージです。 サービスから "クライアント B" にルーティングされるのメッセージは、送信メッセージとして課金されます。

  • 3 つのクライアントと 1 つのアプリケーション サーバーがある場合、1 つのクライアントがサーバー ブロードキャストの 4 KB メッセージをすべてのクライアントに送信すると、課金されるメッセージ数は 8 になります。

    • サービスからアプリケーション サーバーへの 1 つのメッセージ。
    • サービスからクライアントへの 3 つのメッセージ。 各メッセージは、2 つの 2 KB のメッセージとしてカウントされます。

接続のカウント方法

Azure SignalR Service では、アプリケーション サーバーとクライアントの接続を作成します。 既定では、各アプリケーション サーバーの初期接続はハブあたり 5 個で、各クライアントのクライアント接続は 1 個です。

たとえば、2 つのアプリケーション サーバーがあり、コードで 5 つのハブを定義するとします。 サーバー接続数は 50 です (2 つのアプリ サーバー * 5 つのハブ * ハブあたり 5 つの接続)。

Azure portal に表示される接続数には、サーバー接続、クライアント接続、診断接続、およびライブ トレース接続が含まれます。 接続の種類は以下の一覧で定義されています。

  • サーバー接続: Azure SignalR Service とアプリ サーバーを接続します。
  • クライアント接続: Azure SignalR Service とクライアント アプリを接続します。
  • 診断接続: より詳細なログを生成できる特殊なクライアント接続の種類であり、パフォーマンスに影響する可能性があります。 この種類のクライアントは、トラブルシューティング用に設計されています。
  • ライブ トレース接続: ライブ トレース エンドポイントに接続し、Azure SignalR Service のライブ トレースを受信します。

ライブ トレース接続は、クライアント接続およびサーバー接続としてカウントされません。

ASP.NET SignalR では、サーバー接続数の計算方法が異なります。 ユーザーが定義するハブに加えて、1 つの既定のハブが含まれます。 既定では、各アプリケーション サーバーにさらに 5 つの初期サーバー接続が必要になります。 既定のハブの初期接続数は、他のハブと一貫しています。

サービスとアプリケーション サーバーは、パフォーマンスとサービスの安定性を向上させるため、引き続き、接続状態を同期し、サーバー接続に対して調整を加えます。 そのため、実行中のサービスのサーバー接続数に変化が見られることがあります。