2

I'm absolutely new to SignalR, so please excuse my somehow dumb question.

Let's say, I have many console apps (or windows services) that run on AWS EC2 instances, I have a web server (IIS with MVC3 hosted) and of course I have an infinite number of web-clients...

How can I communicate between those? Let's say

  1. I need to get every few seconds in the web browser some information from EC2 machines - (CPU load or something like that)
  2. On demand (when user clicks a button on a web page) it should pull something else (let's say AvailibleDiskSpace on C: drive) of a selected machine

What should I use - Hub or PersistentConnection? Console apps will be also clients in this case or SelfHosts (what is the SelfHost anyway?)

Is there any sample code where I can learn how to build something like that? (I believe samples on Nuget and Github and VideoTutorials show you how to build one-server/many web clients solutions but not something like I need)

4

3 に答える 3

2

最善の策は、IISでMVCアプリと一緒にSignalRサーバーをホストすることです。すでにIISが設定されているので、セルフホスティングについて心配する必要はありません。

ハブではRPCが許可されているため、PersistentConnectionsよりもハブを使用する方が簡単だと思います。

コンソールアプリとWindowsサービスでは、SignalR.NETクライアントを使用することをお勧めします。

https://github.com/SignalR/SignalR/wiki/SignalR-Client-Hubs

コンソールアプリからSignalRサーバーにデータをプッシュおよびプルでき、SignalRサーバーはブラウザークライアントへのプロキシとして機能できます。もちろん、SignalRサーバーは双方向にプロキシできるため、任意のクライアントがリアルタイムメッセージまたは要求を他のクライアントに送信できます。

https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubs

.NETクライアントとJSクライアントは、同じハブまたは異なるハブにアクセスできます。すべてのクライアントが同じハブにアクセスする場合は、2つのタイプのクライアントを区別できるように、それらをグループに分割することをお勧めします。複数のハブを使用することを選択した場合はGlobalHost.ConnectionManager.GetHubContext<MyHub>()、呼び出されているハブとは異なるハブに接続されているクライアントとの通信に使用することをお勧めします。

于 2012-10-03T17:36:03.767 に答える
1

ハブを使用する必要があります。

これを行う方法の例を次に示します (0.5.3):

サーバー側 (ハブ):

public class MyDashboard : Hub
{
    /* Have this method called every few seconds via a timer */
    public void SendLoad()
    {
        // Will call the "retrieveLoad" JS method on the clients
        Clients.retrieveLoad(new {
            CPU = 10.25, // Put something relevant here
            Memory = "80%" // Again, put something relevant here
        });
    }

    public double GetDiskSpace()
    {
        return 3829847; // You'd replace the number with something more relevant
    }
}

クライアント側 (JavaScript):

var dashboard = $.connection.myDashboard;

dashboard.retrieveLoad = function(info) {
    console.log("The CPU is at: " + info.CPU);
    console.log("The Memory is at: " + info.Memory);
}

$.connection.hub.start(function() {
    // This is called once the hub has started, so we need to wire up our click event
    $("#myButton").click(function() {
        dashboard.getDiskSpace(function(space) {
            console.log("The disk space is at: " + space);
        });
    });
});

お役に立てれば!JabbR ルームに立ち寄って、フレームワークについて他の人と話をしてください: http://jabbr.net/#/rooms/signalr

注: データを静的にするために、ハブに何か (プライベート/パブリック変数など) を保持する場合は注意してください。

于 2012-10-03T16:48:12.073 に答える
1

たくさんの質問が 1 つに... :)

まず、コンソール アプリ/Windows サービスは、ブラウザが同じクライアントになるのと同じようにクライアントになる可能性がありますHubPersistentConnectionこのため、プログラミング モデルにドロップダウンする理由はまったくありません。

次に、2 つの異なるユース ケースについて説明します。

  1. 何かの状態を数秒ごとにプッシュする必要がある場合、これは SignalR クライアント側のメソッドとして最適です。パフォーマンス カウンターから受け取る可能性のある通知に基づいて、クライアントでメソッドを呼び出すだけです。このロジックは、ハブ自体内にある場合もあれば、ハブの他のすべてのクライアントに「ファン化」されるメソッドを呼び出すハブのクライアントからの場合もあります (後者をお勧めします)。
  2. ServerAシナリオでボタンを押す/使用可能なスペースを取得する場合、いくつかのレイヤーについて話しています。探している結果を取得し、ブラウザに応答するには、何らかの方法でブラウザからハブ、ServerA へのメッセージを取得する必要があります。正直なところ、これは SignalR だけでは解決できません。ServerA には、Hub が呼び出して結果を取得し、ブラウザ クライアントに応答できる独自のサービス インターフェイスが必要です。次に、ブラウザーでハブ メソッドを呼び出します。ハブ メソッドは ServerA に要求を送信し、結果を待ってから、結果をブラウザーに返します。ルーティングに関する作業はたくさんありますが、魔法のようなものでも、SignalR に固有のものでもありません。このシナリオは、すべての意図と目的のために、今日、純粋な Web サービス アーキテクチャで実行できます。

次に、セルフホストとは、IIS+ASP.NET 以外のホストで SignalR サーバーをホストすることを意味します。たとえば、IIS+ASP.NET でホストする代わりに、別のコンソール アプリまたは Windows サービスで SignalR サービスをスピンアップできます。ここの SignalR Wiki で、セルフホスティングに関する適切なドキュメントを見つけることができます。

SignalR のサンプルに関しては、正直なところ、構築しようと考えているものと、基本的なドキュメントでその方法が示されていることほど大きな違いはありません。コンソール アプリ/Windows サービスの .NET クライアント ハブ wiki ページを確認する必要があります。ブラウザー アプリのブラウザー クライアント wiki ページを確認する必要があります。次に、必要に応じてセルフ ホスティングの wiki ページを確認する必要があります。 IIS+ASP.NET の外部でサーバーをホストします。

于 2012-10-03T17:18:31.453 に答える