Предположим, у меня есть два или более концентраторов в моем серверном приложении. Мой Javascipt клиент (Угловая SPA) initialy требуется подключение к первому ступице, и нужно подписаться на способ, как это:Подключиться к концентратору SignalR после подключения
connection = $.hubConnection(appSettings.serverPath);
firstHubProxy = connection.createHubProxy('firstHub');
firstHubProxy('eventFromFirstHub', function() {
console.log('Method invokation from FirstHub');
});
connection.start().done(function (data) {
console.log("hub started");
});
Все работает отлично. Теперь пользователь моей угловой SPA может решить поставить виджет на своей странице, которая должна subcribe к способу из второго хаба:
secondHubProxy = connection.createHubProxy('firstHub');
secondHubProxy('eventFromSecondHub', function() {
console.log('Method invokation from SecondHub');
});
метод из второго хаба не работает. Я думаю, потому что он был создан после connection.start()
.
Мой пример упрощен, в моем реальном приложении будет 20+ концентраторов, на которые пользователи могут подписаться или не подписаться, добавив или удалив виджеты на свою страницу.
Насколько я могу сказать, у меня есть два варианта:
- вызова connection.stop(), а затем connection.start(). Теперь обе подписки на концентратор работают. Это просто не так, потому что на всех концентраторах происходит событие OnConnected(), и мое приложение будет запускаться и останавливаться все время.
- создать объекты-прокси-концентраторы для всех возможных концентраторов, подписаться на манекен метод на всех возможных концентраторах, поэтому при необходимости приложение может подключиться к концентратору . Это также не очень хорошо, потому что i необходимо создать 20+ прокси-серверов, в то время как мне может понадобиться только несколько из тех.
Кто-нибудь знает о шаблоне, который я могу использовать для достижения этого? Или я пропустил что-то очень простое здесь?
Спасибо за ваш пример. Таким образом, это также означает, что вы используете только один концентратор в своем серверном приложении? – Jeroen1984
Да, но применяется то же самое «подписаться на все клиентские методы». –
Хорошо, я понял. Я настрою его немного, поэтому изначально только подключение запускается и создается прокси-сервер. Таким образом, я могу позволить своим контроллерам подписываться (.on) и не подписывать (.off) на требуемые события хаба, с необходимостью жестко кодировать все возможные клиентские методы (например, вы выполняете функцию active()). – Jeroen1984