#python #websocket #python-asyncio #ping #debounce
#python #websocket #python-asyncio #ping #отключение
Вопрос:
Использование Python Websockets [1] для управления набором подключений к websocket на стороне сервера из браузера. Они должны быть зарегистрированы и поддерживаться.
Проблема: когда пользователь отключается, устаревшее соединение остается в реестре. Кроме того, если пользователь обновляет браузер (1, 2, 17 или n раз) или присутствует сценарий повторного подключения, регистрируется больше недействительных подключений. Это создает реестр, полный устаревших подключений.
Документы решают эту проблему следующим образом:
Как показано в примере синхронизации выше, если вам нужно вести список подключенных в данный момент клиентов, вы должны зарегистрировать их при подключении и отменить регистрацию при отключении.
Как правильно идентифицировать и удалять устаревшие соединения? Требуется ли какая-то схема для пинг-понга?
Я нашел код в [2], но он восходит к 2018 году. Это устарело или с тех пор эта проблема была решена?
Ссылка:
Ответ №1:
В принципе, да, схема ping / pong используется для обеспечения соединения. TCP использует нечто подобное с keep-alive
. Отправляйте ping каждые X секунд, и если клиент пропускает N раз, то можно с уверенностью предположить, что клиентское соединение отключено и может быть удалено. Предоставленная вами ссылка # 2, по сути, является сутью того, как вы могли бы реализовать сохранение. Вот пример использования autobahn
, который имеет множество функций качества жизни, которые я не видел в других фреймворках.
Я мог ошибаться, но я думал, что websockets отправляют какой-то сигнал «disconnect» при обновлении браузера, поэтому вы должны иметь возможность отключать соединения таким образом. Я не работал с websockets несколько лет, но я рекомендую сделать ваш пользовательский интерфейс одностраничным приложением и «отговорить» пользователей от обновления. Хотя и не всегда.