Ответ 1
Если вы используете концентраторы, вы можете остановить соединение концентратора:
$.connection.hub.stop();
Есть ли способ остановить сервер опроса в SignalR? Я хочу остановить сервер опроса, если возникла ошибка. Центры опроса начинаются с $.connection.hub.start()
, поэтому я предположил, что его можно остановить с помощью $.connection.hub.stop()
или что-то в этом роде. Но, похоже, это не работает, опрос продолжается даже после вызова stop()
. Есть ли другой способ остановить опрос?
<script type="text/javascript">
var chatHub = $.connection.chatHub;
var connection = $.connection.hub;
chatHub.addMessage = function (message) {
$('#messages').append('<li>' + message + '</li>');
};
connection.error(function (error) {
$('#messages').append('<li>' + "error connecting: closing connnection" + '</li>');
connection.stop(); //This doesn't seem to work
});
connection.start();
</script>
Если вы используете концентраторы, вы можете остановить соединение концентратора:
$.connection.hub.stop();
Во-первых, вы уверены, что это необходимо? Если возникает ошибка связи, то, очевидно, вы хотите повторить попытку.
Однако я просмотрел исходный код, и я имею в виду, что особенно в обработчике ошибок невозможно вызвать команду .stop()
. Соответственно, это не имеет никакого эффекта, потому что после того, как функция обработчика закончена, связь автоматически повторно инициализируется через 2 секунды после.
См. jquery.signalR.js(строка 340):
$(instance).trigger("onError", [data]);
window.setTimeout(function () {
poll(instance);
}, 2 * 1000);
Я нашел одно обходное решение: в функции обработчика выдает исключение, из-за чего этот опрос не повторно инициализируется:
connection.error(function (error) { //$.connection.hub.error()
$('#messages').append('<li>' + "error connecting: closing connnection" + '</li>');
throw "Close SignalR connection";
});