Контекст: я разрабатываю систему, аналогичную системе Uber, в частности, сервер обеспечивает поток данных между двумя типами пользователей (например, водителем и клиентом) через свои приложения, подключаясь к концентратор SignalR сервера. Отслеживание их состояния подключения к серверу является обязательным, и этот процесс должен быть как можно более мгновенным.
Их состояние подключения управляется через HashList<>()
для каждого типа пользователя (2 списка). Запись добавляется в список всякий раз, когда пользователь подключается (вызывается OnConnected()
), и эта запись удаляется из списка всякий раз, когда пользователь отключается (вызывается OnDisconnected()
).
Эти HashLists
являются статическими переменными, следующими лиге этого ответа StackOverflow.
При локальной отладке на моем компьютере списки HashLists изменяются мгновенно, но при публикации в облачной службе (в моем случае: Azure) для обновления списков требуется время (около 10–15 секунд). Однако получение действительного соединения с сервером занимает всего около 5 секунд.
Теперь я знаю, что подключение к серверу не может быть мгновенным, и это зависит от нескольких факторов, большинство из которых вне моей досягаемости, но мгновенное обнаружение отключений (или настолько мгновенное, насколько это возможно) решит мою проблему, что я должен делать? делать? Есть ли другой подход, который я должен использовать?
PS: Мгновенное обнаружение отключений можно выполнить на стороне клиента, но в моем случае это не поможет, поскольку мне нужны данные о подключенных пользователях на сервере.
OnDisconnected
требует времени для вызова? Что касается службы SignalR, я обязательно попробую, но опять же, приложение все еще находится в стадии разработки, я посмотрю, подойдет ли нам бесплатный план. 03.04.2020