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

SignalR: обнаружение состояния соединения на клиенте

Я видел, как вы можете захватить событие разъединения на стороне клиента с помощью SignalR, связав его с событием .disconnect.

Теперь, когда я это сделал, я хочу поместить клиента в "ожидание повторного соединения цикла", где он постоянно пытается подключиться, пока он не завершится, или пользователь не отменяет. Содержит ли хаб свойство состояния соединения? Я думаю что-то вроде (псевдо-код)

var isConnected;

function onConnected() { isConnected = true; }

hub.disconnect = function() { while(hub.notconnected) { connect(); }
4b9b3361

Ответ 1

Клиент JS пытается повторно подключиться на определенный период времени, который по умолчанию составляет 110 секунд. Вы можете подписаться на событие connection.stateChanged и получать обновления при изменении состояния, чтобы вы могли отобразить его пользователю или проверить ответ SignalR на разные сценарии отключения.

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

Дополнительная информация о соединениях signalr

function connectionStateChanged(state) {
    var stateConversion = {0: 'connecting', 1: 'connected', 2: 'reconnecting', 4: 'disconnected'};
    console.log('SignalR state changed from: ' + stateConversion[state.oldState]
     + ' to: ' + stateConversion[state.newState]);
}

connection = $.connection(signalR_Endpoint);
connection.stateChanged(connectionStateChanged);
connection.start({ waitForPageLoad: false });

Ответ 2

Клиент всегда пытается подключиться. Вам не нужно беспокоиться об этом. Здесь есть повторное соединение, которое вы можете прослушать, если вы хотите что-то сделать, когда соединение успешно восстановлено.

EDIT: это изменилось, клиент только пытается восстановить соединение в течение определенного периода времени. После этого вам нужно поймать событие разъединения и вручную перезапустить.