поддержание активности клиентского соединения SignalR

Если мое клиентское соединение SignalR прерывается, я хочу, чтобы клиент попытался восстановить соединение. Это хороший образец для реализации этого? Я имею в виду обработку события Closed в соединении SignalR путем перезапуска соединения.

public class OnPremiseWebHubClient
{
    private HubConnection _hubConnection;
    private IHubProxy _hubProxy;

    private OnPremiseWebHubClient() { }
    static OnPremiseWebHubClient() { }
    private static readonly OnPremiseWebHubClient _instance = new OnPremiseWebHubClient();
    public static OnPremiseWebHubClient Instance { get { return _instance; } }

    public async Task Start()
    {
        _hubConnection = new HubConnection("http://OnPremiseWeb/");
        _hubProxy = _hubConnection.CreateHubProxy("OnPremiseHub");

        // IS THIS A GOOD PATTERN FOR KEEPING THE CONNECTION ALIVE?
        _hubConnection.Closed += async () =>
        {
            // reconnect if we close
            await _hubConnection.Start();
        };

        await _hubConnection.Start();
    }
}

person John Livermore    schedule 24.06.2016    source источник


Ответы (1)


SignalR имеет собственный механизм переподключения. Но после нескольких попыток состояние изменится на отключено / закрыто. Состояние Disconnected / Closed означает, что сигнализатор попытался повторно подключиться, но не смог. Так что это хорошее место для применения повторного подключения для постоянного повторного подключения.

Есть один недостаток: на мобильном устройстве это переподключение будет использовать батарею.

Вы можете проверить здесь подробнее.

person Erkan Demirel    schedule 27.06.2016