Отключения SignalR

Я использую Signalr в приложении, которое я пишу, и сохраняю все пользовательские соединения в параллельном словаре.

ConcurrentDictionary<string, User> _users = new ConcurrentDictionary<string, User>();

например https://github.com/SignalR/SignalR/blob/master/samples/SignalR.Hosting.AspNet.Samples/Hubs/ShapeShare/ShapeShare.cs

Я реализовал интерфейс IDisconnect на своем концентраторе и удаляю пользователей из словаря, когда они отключаются.

Мне интересно, насколько надежен метод Disconnect? Охватывает ли он все различные способы, которыми пользователь может отключиться? Я не хочу, чтобы словарь рос и рос бесконечно

Я думал о том, чтобы иметь таймер для периодического обхода словаря и удаления пользователей, у которых не было какой-либо недавней активности.

Это необходимо? Могу ли я полагаться на метод отключения?


person ChrisCa    schedule 09.08.2012    source источник


Ответы (2)


Посетите https://github.com/SignalR/SignalR/wiki/Configuring-SignalR , есть настройки для:

DisconnectTimeout KeepAlive и интервал Heatbeat

Все это может быть применено, чтобы помочь в поддержании вашего словаря.

По моему опыту, изящное отключение, кажется, отлично работает на signalR (все еще проблемы с win-apps), если оно неизящно отключается через несколько минут, время ожидания соединения истечет, и метод отключения сработает и удалит его из вашего словаря, как сказал Дрю.

Вы можете создать метод, который отправляет сообщение всем клиентам и регистрирует возвращенный идентификатор соединения, а затем удаляет все старые записи, но на практике метод отключения работает/работает сам по себе, я бы реализовал интервал сердцебиения только в том случае, если вы действительно нужно очень внимательно следить за соединениями.

person user685590    schedule 14.08.2012

Если он не срабатывает, это ошибка, и вам следует сообщить о проблеме в проект SignalR на GitHub. . Вот список открытых проблем с Disconnects на данный момент.

Имейте в виду, что диф. транспорты имеют разн. отключите логику обнаружения, и поэтому, в зависимости от того, какой транспорт использует пользователь, вы увидите diff. схемы срабатывания отключения, но оно ДОЛЖНО срабатывать в конечном итоге для всех транспортов.

person Drew Marsh    schedule 09.08.2012
comment
Срабатывает ли Disconnect даже после повторного использования пула приложений? Моя проблема заключается в том, чтобы знать, когда сделать недействительным мой кеш. Пул быстрых приложений не должен делать кеш недействительным. Но если сервер не работает дольше интервала DisconnectTimeout KeepAlive, кеш больше не должен быть действительным. - person D'Arcy Rittich; 01.10.2013