web-dev-qa-db-ja.com

複数の接続を持つSignalRクライアント

複数のSignalR「サービス」を実行していて、それらにアクセスするためのUIは1つだけです。

クライアントjsに異なるURLの複数の接続と通信させるにはどうすればよいですか? $ .connection.hubごとに指定できるURLは1つだけであり、複数の「signalr/hubs」クライアントスクリプトを使用できないためです。

何か助けはありますか?ありがとう。

16
Adamy

$ .connection.hubは、/ signalr/hubsインクルードに作成されます。

ファイルの終わりにそれは本質的にします:

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

ハブプロキシを作成するには、次のようにします。

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

複数の接続の簡単な例:

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();
24

そのような場合の私の解決策:

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();
});
6
BineG