SignalR - множественные концентраторы - запускают соединения индивидуально

У меня есть приложение SignalR, которое имеет несколько концентраторов (концентраторы являются частью различных проектов внутри одного и того же решения).

В интерфейсе я хочу начать подключения на основе компонента, который пользователь просматривает в данный момент.

Предположим, что у меня есть 2 ступицы и 2 компонента: TestHub1, TestHub2; Component1, Component2.

В каждом компоненте я создаю соединение следующим образом:

var testHub = $.connection.testHub;
 //define client methods
 $.connection.hub.logging = true;
 $.connection.hub.start();
 });

Итак, я делаю это в нескольких компонентах. Теперь, предполагая, что у меня есть оба компонента, подключенные к TestHub1 и TestHub2 соответственно (в то же время), как я могу только остановить одно соединение? Если в любом компоненте я вызываю $.connection.hub.stop(), оба соединения хаба останавливаются.

Как я могу запускать и останавливать соединения концентратора по отдельности? (Потому что если в какой-то момент после того, как я остановил их обоих, и я вызываю $.connection.hub.start(), даже если я вызываю это из компонента, который использует TestHub1, TestHub2 также запустит соединение.

Итак, я ищу способ начать и прекратить отдельные подключения к узлу, а не целые $.connection.start() и $.connection.hub.stop().

Спасибо!

1 ответ

По умолчанию созданный прокси-класс создает одно соединение для всех концентраторов. Таким образом, вы можете иметь несколько концентраторов, разделяющих одно соединение на вашем сайте. Но все концентраторы получают одну и ту же информацию запроса HTTP. http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#multiplehubs

Поскольку все концентраторы используют одно и то же соединение, единственная информация HTTP-запроса, которую получает сервер, - это то, что приходит в исходном HTTP-запросе, который устанавливает соединение SignalR. Если вы используете запрос соединения для передачи информации от клиента на сервер, указав строку запроса, вы не можете предоставить разные строки запросов для разных концентраторов. Все концентраторы получат ту же информацию.

Чтобы управлять соединениями для каждого хаба-мануала, вам необходимо реализовать прокси-сервер самостоятельно:

var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');
contosoChatHubProxy.on('addContosoChatMessageToPage', function(name, message) {
 console.log(name + ' ' + message);
});
connection.start().done(function() {
 // Wire up Send button to call NewContosoChatMessage on the server.
 $('#newContosoChatMessage').click(function () {
 contosoChatHubProxy.invoke('newContosoChatMessage', $('#displayname').val(), $('#message').val());
 $('#message').val('').focus();
 });
 });

Пожалуйста, смотрите здесь, чтобы узнать подробнее http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#getproxy

licensed under cc by-sa 3.0 with attribution.