SignalR: обнаружение состояния соединения на клиенте
Я видел, как вы можете захватить событие разъединения на стороне клиента с помощью SignalR, связав его с событием .disconnect.
Теперь, когда я это сделал, я хочу поместить клиента в "ожидание повторного соединения цикла", где он постоянно пытается подключиться, пока он не завершится, или пользователь не отменяет. Содержит ли хаб свойство состояния соединения? Я думаю что-то вроде (псевдо-код)
var isConnected;
function onConnected() { isConnected = true; }
hub.disconnect = function() { while(hub.notconnected) { connect(); }
Ответы
Ответ 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: это изменилось, клиент только пытается восстановить соединение в течение определенного периода времени. После этого вам нужно поймать событие разъединения и вручную перезапустить.