Skip to content

perf: быстрый старт стрима — известные адреса устройств и параллельная подготовка - #33

Merged
0xcodepunk merged 1 commit into
mainfrom
feature/fast-stream-start
Jul 5, 2026
Merged

perf: быстрый старт стрима — известные адреса устройств и параллельная подготовка#33
0xcodepunk merged 1 commit into
mainfrom
feature/fast-stream-start

Conversation

@0xcodepunk

@0xcodepunk 0xcodepunk commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Проблема

От /stream_on до звука проходило ~8–9 секунд, из них ~7 секунд — SSDP-скан всей сети ради Ruark, адрес которого в домашней сети практически не меняется, плюс фиксированная пауза в подготовке устройств.

Что сделано

Ruark — три источника адреса по приоритету:

  1. APP_RUARK_HOST из .env (новая необязательная настройка) — юникастовый M-SEARCH прямо на известный IP, ответ за десятки миллисекунд (ssdp.py).
  2. Кеш location-URL прошлого успешного поиска (cache/ruark_location.txt, RuarkLocationStore) — быстрый старт работает и без настройки, со второго запуска.
  3. Полный SSDP-скан — фолбэк, как раньше.

Перед использованием известного адреса — TCP-проверка доступности (2с) и сверка friendly_name (чужое устройство по адресу не принимается). Любая неудача — тихий фолбэк на скан.

Станция: параметры (device_id/platform/host/port) кешируются в cache/station_device.json (StationDeviceStore). При старте — быстрая TCP-проверка кешированного адреса, при недоступности — обычный mDNS с обновлением кеша.

Параллельность: поиск Ruark и запуск WebSocket-клиента станции в start() идут одновременно (asyncio.gather); при любой ошибке WebSocket корректно останавливается. Фиксированный sleep(1) в _prepare_devices заменён ожиданием первого сообщения станции (обычно приходит мгновенно).

…я подготовка

- добавлена настройка APP_RUARK_HOST: юникастовый M-SEARCH на известный IP вместо SSDP-скана всей сети (ssdp.py, ssdp_locate)
- добавлен RuarkLocationStore: location-URL Ruark кешируется между запусками (cache/ruark_location.txt)
- добавлен StationDeviceStore: параметры станции кешируются между запусками (cache/station_device.json), быстрая TCP-проверка адреса перед использованием
- refresh_device и _ensure_device переведены на быстрый путь с фолбэком на полный поиск при недоступности или чужом устройстве
- поиск Ruark и подключение к станции в start() выполняются параллельно, при ошибке WebSocket-клиент останавливается
- фиксированная пауза sleep(1) в _prepare_devices заменена ожиданием первого сообщения станции
- добавлены тесты быстрых путей, фолбэков и сторов; обновлён пример .env в README
@0xcodepunk
0xcodepunk merged commit 871ddd0 into main Jul 5, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant