2016-12-08 6 views
0

私はWebサイトをAzure Web Appとして実行しており、これはSignalRとAzure Service Busスケールアウトバックプレーンを使用するように構成されています。すべて正常に動作し、クライアントは/ signalr URL経由で接続し、サーバーから接続されたクライアントにデータをプッシュできます。SignalRウェブソケットを介してコンソールプログラムからデータをプッシュするにはどうすればよいですか?

私はまた、定期的に新しいデータを実行して出力するいくつかのコンソールアプリケーションを持っています。また、新しいデータをWeb接続されたクライアントに送信したいと思います。

Web以外のアプリケーションでSignalRを使用するにはどうすればよいですか?私が見ているすべての例では、スケールアウトクラスタ内のすべてのサーバがWeb対応であると仮定しています。外部プロセスがSignalRクラスターに参加し、SignalR WebSocket接続を介してWeb接続されたクライアントにデータをプッシュできるようにするために、特別な設定が必要ですか?

+1

重複している可能性があります[SignalR Consoleのアプリ例](http://stackoverflow.com/questions/11140164/signalr-console-app-example) – bartbje

+0

あなたがリンクした例は、クライアントがコンソールアプリケーションに直接接続していることを示し、コンソールアプリケーションはポート8088上のSignalRエンドポイントを提供しています。私の場合、クライアントはエンドポイントを管理するWebサーバーに接続し、コンソールアプリケーションは、Webサーバーがピックアップして接続されたクライアントに送信する必要があるSignalRスケールアウトバックプレーンを介してデータをプッシュします。 –

答えて

1

2つのオプションがあります。

まずオプション

あなたはsignalRバックプレーンに、あなたの「コンソールアプリケーション」を接続することができ、そしてこれらのアプリケーションは、あなたが任意のポートを使用することができます

var hub = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
hub.Clients.All.doSomething("blah-blah"); 

のようなもので、クライアントのメソッドを呼び出すことができますsignalR configでは同じバックプレーン構成と同じハブになります。自己ホスティングにはOwinを使用できます。誰もこれらのコンソールアプリケーションに接続しません。

短所:

1)あなたのコンソールアプリケーションSignalR.SelfHostingとあなたのハブのクラスを参照する必要があります。これはアーキテクチャの観点からは良くありません。

2)コンソールアプリケーションは、(signalRサーバーなので)いくつかのポートをリッスンします。理論的に誰かがこのハブに接続して何かをすることができます。これは、セキュリティから見たアーキテクチャの観点からもいいものでもない。

番目のオプション

あなたは「PushSomeDataToClients」のようなハブメソッドを実装し、@bartbjeコメントで述べたようにSignalR クライアントを使用して、コンソールアプリケーションから呼び出すことができます。

長所:最初のオプションの欠点はありません。

短所:システム外の誰もがこのメソッドを呼び出さないようにするには、セキュリティの要素を実装する必要があります。 SignalRはこれを行うにはたくさんのものがありますので、ちょうどGoogle。たとえば、システム間通信用に別のハブを作成することができます。

第三の選択肢

は別の方法で、その後SignalRを使用してWebサーバアプリケーションと対話します。おそらくあなたはすでにrabbitMqや任意のタイプのサービスバスのようなものを使っています。また、Webサーバーアプリケーションで別のApiControllerを使用して実装することもできます。しかし、それは第二の選択肢に近いと思われる。

私のために、アーキテクチャの観点からはきれいなので、おそらく3番目のオプションを選択します。

+0

3番目のオプションで良いアイデア。 –

関連する問題