Как использовать события SignalR, чтобы поддерживать соединение в правильном направлении?
Я разрабатываю клиентское серверное приложение реального времени с использованием SignalR, ASP.NET и С#. Я использую localhost как host и VS2013.
Мои вопросы:
-
Почему, если я закрыть сервер, на веб-клиенте происходит событие Подключить?
-
Событие "Отключить" происходит только после 40 + секунд. Как уменьшить это время?
-
Мне нужно, чтобы клиент подключился к серверу при запуске. Событие "Повторное подключение" должно выполняться только в фиксированном интервале. Если время пересоединения "Повторное подключение" завершено, клиент должен подключиться как новый клиент. Как заархивировать эту цель?
Наконец, я хотел бы спросить - как поддерживать связь с помощью SignalR в правильном пути?
Я использую этот код:
С#
public override Task OnDisconnected()
{
clientList.RemoveAt(nIndex);
Console.WriteLine("Disconnected {0}\n", Context.ConnectionId);
return (base.OnDisconnected());
}
public override Task OnReconnected()
{
Console.WriteLine("Reconnected {0}\n", Context.ConnectionId);
return (base.OnReconnected());
}
Javascript
$.connection.hub.reconnected(function () {
// Html encode display name and message.
var encodedName = $('<div />').text("heartbeat").html();
var now = new Date();
// Add the message to the page.
$('#discussion').append('Reconnected to server: ' + now + '</br>');
});
$.connection.hub.disconnected(function () {
// Html encode display name and message.
var encodedName = $('<div />').text("heartbeat").html();
var now = new Date();
// Add the message to the page.
$('#discussion').append('Disconnected from server: ' + now + '</br>');
});
После подключения:
message received from server : Fri Feb 21 2014 10:53:02
После закрытия вывода сервера:
Reconnected to server: Fri Feb 21 2014 10:53:22 <-- Why, if i close server ???
Disconnected from server: Fri Feb 21 2014 10:53:53 <-- Why 40+ seconds after the server is closed ?
Ответы
Ответ 1
1. После того как я закрыть сервер, на веб-клиенте произойдет событие < Reconnect ", а событие < Отключить произойдет только после. Почему?
SignalR не может определить разницу между закрытием сервера и перезапуском сервера. По этой причине, когда сервер выключается, клиент начнет пытаться повторно подключиться в случае перезапуска сервера.
2. "Отключить" происходит 30 + секунд после неизвестного "Повторного подключения". Как уменьшить это время?
Этот 30-секундный тайм-аут может быть изменен с помощью свойства DisconnectTimeout.
3. Мне нужно, чтобы клиент подключился к серверу при запуске. "Повторное подключение" должно выполняться только в пределах фиксированного интервала. Если время пересоединения "Повторное подключение" превышает клиент, он должен подключиться как новый клиент.
Вы должны запустить соединение в отключенном событии, желательно после таймаута, чтобы уменьшить нагрузку на сервер, если он перезагрузится.
$.connection.hub.disconnected(function() {
setTimeout(function() {
$.connection.hub.start();
}, 5000); // Re-start connection after 5 seconds
});
Вся статья Понимание и обработка событий продолжительности жизни в SignalR, вероятно, зависит от вашего вопроса.