2013-03-18 89 views
13

複数のSignalR 'サービス'が稼動しており、それらにアクセスするUIは1つだけです。複数の接続を持つSignalRクライアント

どのようにして、クライアントjsを異なるURLで複数の接続に話すことができますか?私は$ .connection.hubにつき1つのURLしか指定できないようで、複数の 'signalr/hubs'クライアントスクリプトを使用することはできません。

助けが必要ですか?ありがとう。

答えて

23

$ .connection.hubは、/ signalr/hubsインクルードに作成されます。複数の接続のための

var myHub = $.connection.hub.createHubProxy('myHub'); 

簡単な例:

$.connection.hub = $.hubConnection("/signalr", { useDefaultPath: false }); 

はあなたがハブプロキシを作成するには:それは基本的にないファイルの終わりに

var connection1 = $.hubConnection("http://www.myfirstendpoint.com"); 
var connection2 = $.hubConnection("http://www.mysecondendpoint.com"); 

var myCon1Hub = connection1.createHubProxy('myCon1Hub'); 
var myCon2Hub = connection2.createHubProxy('myCon2Hub'); 

myCon1Hub.client.foo = function() { ... Whatever you want ... }; 
myCon2Hub.client.foo = function() { ... Whatever you want ... }; 

connection1.start(); 
connection2.start(); 
+0

ありがとう。できます。 – Adamy

+2

ブラウザには、ドメインあたりの同時接続数が限られていることに注意してください。したがって、いくつかのタブを開くと、ページの読み込みが停止する可能性があります。 – davidfowl

+0

https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubs-%28No-Proxy%29は独自の 'hubConnection'を作成するための詳細なドキュメントを提供します – halter73

6

をマイそのような機会のためのソリューション:

var SignalRHelpers = function() { 
    var _connectionDeferred; 

    var subscribeToConnectionStart = function (callback) { 
    if (!_connectionDeferred) // start connection if not yet initialized 
     _connectionDeferred = $.connection.hub.start(); 

    if ($.connection.hub.state == $.connection.connectionState.connected && callback) { 
     // already connected 
     callback(); 
    } else if (callback) { 
     // register handler 
     _connectionDeferred.done(callback); 
    } 
    }; 

    return { 
    SubscribeToConnectionStart: subscribeToConnectionStart 
    }; 
}(); 

これは内部的にstart()からのpromiseオブジェクトを格納し、必要に応じてハンドラを接続します。

基本的には、接続する必要があるたびにSignalRHelpers.SubscribeToConnectionStartを呼び出します。例えば、

SignalRHelpers.SubscribeToConnectionStart(function(){ 
    someHub.server.executeSomething(); 
}); 
+0

これは私がSPAで持っていた非常に神秘的な問題を解決しました。私はSignalRのビューにいる間、SignalRが動作するようにページを更新しなければなりません。私はそれに行きました。しかし、plain $ .connection.hub.start()の代わりにSubscribeToConnectionStartを使用すると、 –

関連する問題