Как использовать события 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, вероятно, зависит от вашего вопроса.