Подтвердить что ты не робот

Клиент SignalR с несколькими соединениями

У меня есть несколько служб служб SignalR и только один пользовательский интерфейс для доступа к ним.

Как я могу заставить клиента js разговаривать с несколькими соединениями с другим URL? Потому что кажется, что я могу указать только один URL-адрес для $.connection.hub, и я не могу использовать несколько клиентских скриптов signalr/hubs.

Любая помощь? Спасибо.

4b9b3361

Ответ 1

$. 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();

Ответ 2

Мое решение для таких случаев:

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() и при необходимости прикрепляет обработчики.

В основном вы просто вызываете SignalRHelpers.SubscribeToConnectionStart каждый раз, когда вам нужно подключиться. Например

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