Signalr: как остановить / закрыть одно соединение напрямую без go через процесс повторного соединения - PullRequest
0 голосов
/ 21 января 2020

В моем проекте Angular я использую Signalr для получения данных в реальном времени следующим образом:

var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');
contosoChatHubProxy.on('addContosoChatMessageToPage', function(userName, message) {
    console.log(userName + ' ' + message);
});
connection.start()
    .done(function(){ console.log('Now connected, connection ID=' + connection.id); })
    .fail(function(){ console.log('Could not connect'); });

connection.stateChanged((state: SignalR.StateChanged) => {
  if (state.newState === ConnectionState.Disconnected) {
      connection.start()
  }
});

Приведенный выше код не совпадает на 100% с моим кодом. Но логика c такая же, запустите соединение и также установите лог пересоединения c.

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

Я попытался connection.stop(), но поскольку здесь есть логика повторного подключения c, соединение сначала переходит в состояние отключения и автоматически перезапускается снова.

Существует ли какой-либо другой API со стороны клиента SignalR, может ли он удовлетворить мои требования?

1 Ответ

1 голос
/ 21 января 2020

Установите флажок для каждого вызова connection.stop().

Давайте назовем его manually_stopped

И в ваш обработчик stateChanged добавьте проверку для manually_stopped

Где бы вы ни позвонили connection.stop(), сделайте это:

fucntion_to_close_connection(){
  manually_stopped = 1
  connection.stop()
}
connection.stateChanged((state: SignalR.StateChanged) => {
  if (state.newState === ConnectionState.Disconnected && manually_stopped == 0) {
      connection.start()
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...