現在、Azure Web サイトで signalR を単一のインスタンスで使用して、データをクライアントにプッシュしています。問題はありません。
プロジェクトを個別の web/worker ロールと wcf ロールに分割して、それらを個別にスケーリングできるようにします。
サイトはこのように動作します。
シナリオA
ユーザーが Web ロールにデータを送信すると、そのデータはワーカー A の準備が整った Service Bus キューに入れられ、アイドル状態の場合に (ポーリングを保存するために) 新しいアイテムが追加されたことを示すメッセージがワーカー A に送信されます。ワーカー A がそれを処理すると、特定のクライアントにプッシュする Web ロールにメッセージを送信します。
シナリオB
wcf ロールでデータを受信すると、ワーカー B の準備が整った別の Service Bus キューに入れられます。wcf ロールは、ワーカー B がアイドル状態の場合に備えて、新しいアイテムが追加されたというメッセージをワーカー B に送信します。ワーカー B がメッセージを処理すると、メッセージが Web ロールに送信され、特定のクライアントにプッシュされます。
以下に悪い例を示します。
ユーザーに対する Web ロールの signalR サービス バス バックプレーンを有効にします。私がよくわからないのは、自分の役割が互いに通信する方法です。
必要なもの:
Web ロール => ワーカー A
ワーカー A => Web ロール
wcf ロール => ワーカー B
ワーカー B => Web ロール
Web、ワーカー A、およびワーカー B にすべてサービス バス トピックを使用してハブを作成していますか? そして、どうにかして signalr .net クライアントに接続しますか? パブリックに公開せずに、Web ロールのすべてのインスタンスにアクセスするようにするにはどうすればよいですか?
なんらかの理由で、何百ものクライアントが JavaScript 経由で Web ロール ハブに接続するのは簡単に思えますが、いくつかの内部のものを接続しようとしても、よくわかりません。