[PR #923] [CLOSED] fix: выбор IP датацентра с учётом медиа-трафика #72

Closed
opened 2026-07-19 11:34:39 +03:00 by mirror-bot · 0 comments

📋 Pull Request Information

Original PR: https://github.com/Flowseal/tg-ws-proxy/pull/923
Author: @f4rceful
Created: 5/31/2026
Status: ❌ Closed

Base: main ← Head: fix/media-aware-dc-ip


📝 Commits (1)

  • b7b917b fix: media-aware DC IP resolution

📊 Changes

4 files changed (+50 additions, -16 deletions)

View changed files

📝 proxy/config.py (+23 -4)
📝 proxy/pool.py (+9 -5)
📝 proxy/tg_ws_proxy.py (+16 -6)
📝 utils/tray_common.py (+2 -1)

📄 Description

## Что сделано

  • Раздельная маршрутизация медиа- и обычного трафика по DC. Синтаксис --dc-ip расширен: суффикс m у номера DC задаёт IP только для медиа, например --dc-ip 2m:149.154.167.220.
  • parse_dc_ip_list теперь возвращает кортеж (dc_redirects, media_redirects); добавлена функция resolve_dc_ip(...), централизующая выбор адреса с учётом is_media.
  • resolve_dc_ip используется в трёх местах: клиентский путь, прогрев WS-пула (pool.warmup) и стартовая диагностика. Добавлено поле media_redirects в ProxyConfig и проброс в трее (tray_common.apply_proxy_config).

Зачем

Выбор IP раньше шёл только по номеру DC (dc_redirects[dc]), флаг is_media на адрес не влиял. Медиа- и обычный трафик одного DC принудительно шли на один адрес — именно поэтому в документации CfWorker приходится «сливать» всё через единственную запись 4:149.154.167.220, чтобы заработала загрузка медиа.

Теперь для медиа можно задать отдельный адрес, а при отсутствии медиа-записи происходит фолбэк на обычный IP этого DC — обратная совместимость полная.

Как проверить

  • python -m ruff check proxy/config.py proxy/pool.py proxy/tg_ws_proxy.py utils/tray_common.py — без замечаний.
  • Запустить прокси, подключить Telegram Desktop: в логе медиа-сессии идут отдельной веткой (DC2 media -> wss://kws2-1.web.telegram.org/apiws), обычные — своей (DC2 -> wss://kws2...).
  • Пример раздельной маршрутизации: --dc-ip 2:IP_A --dc-ip 2m:IP_B → обычный трафик DC2 идёт на IP_A, медиа — на IP_B.
  • Локально проверено юнит-тестами: разбор обычных и медиа-записей, медиа-переопределение, фолбэк на обычный IP, неизвестный DC.

Примечание: этот PR и PR с поддержкой IPv6 в --dc-ip оба правят parse_dc_ip_list. Какой будет смержен вторым — потребует тривиального ребейза одной строки (валидация IP). Готов поправить.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Flowseal/tg-ws-proxy/pull/923 **Author:** [@f4rceful](https://github.com/f4rceful) **Created:** 5/31/2026 **Status:** ❌ Closed **Base:** `main` ← **Head:** `fix/media-aware-dc-ip` --- ### 📝 Commits (1) - [`b7b917b`](https://github.com/Flowseal/tg-ws-proxy/commit/b7b917b938d50891ca9d41d7648ee8077524b58b) fix: media-aware DC IP resolution ### 📊 Changes **4 files changed** (+50 additions, -16 deletions) <details> <summary>View changed files</summary> 📝 `proxy/config.py` (+23 -4) 📝 `proxy/pool.py` (+9 -5) 📝 `proxy/tg_ws_proxy.py` (+16 -6) 📝 `utils/tray_common.py` (+2 -1) </details> ### 📄 Description ## Что сделано - Раздельная маршрутизация медиа- и обычного трафика по DC. Синтаксис `--dc-ip` расширен: суффикс `m` у номера DC задаёт IP только для медиа, например `--dc-ip 2m:149.154.167.220`. - `parse_dc_ip_list` теперь возвращает кортеж `(dc_redirects, media_redirects)`; добавлена функция `resolve_dc_ip(...)`, централизующая выбор адреса с учётом `is_media`. - `resolve_dc_ip` используется в трёх местах: клиентский путь, прогрев WS-пула (`pool.warmup`) и стартовая диагностика. Добавлено поле `media_redirects` в `ProxyConfig` и проброс в трее (`tray_common.apply_proxy_config`). ## Зачем Выбор IP раньше шёл только по номеру DC (`dc_redirects[dc]`), флаг `is_media` на адрес не влиял. Медиа- и обычный трафик одного DC принудительно шли на один адрес — именно поэтому в документации CfWorker приходится «сливать» всё через единственную запись `4:149.154.167.220`, чтобы заработала загрузка медиа. Теперь для медиа можно задать отдельный адрес, а при отсутствии медиа-записи происходит фолбэк на обычный IP этого DC — обратная совместимость полная. ## Как проверить - `python -m ruff check proxy/config.py proxy/pool.py proxy/tg_ws_proxy.py utils/tray_common.py` — без замечаний. - Запустить прокси, подключить Telegram Desktop: в логе медиа-сессии идут отдельной веткой (`DC2 media -> wss://kws2-1.web.telegram.org/apiws`), обычные — своей (`DC2 -> wss://kws2...`). - Пример раздельной маршрутизации: `--dc-ip 2:IP_A --dc-ip 2m:IP_B` → обычный трафик DC2 идёт на IP_A, медиа — на IP_B. - Локально проверено юнит-тестами: разбор обычных и медиа-записей, медиа-переопределение, фолбэк на обычный IP, неизвестный DC. --- > Примечание: этот PR и PR с поддержкой IPv6 в --dc-ip оба правят parse_dc_ip_list. Какой будет смержен вторым — потребует тривиального ребейза одной строки (валидация IP). Готов поправить. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
mirror-bot added the pull-request label 2026-07-19 11:34:39 +03:00
mirror-bot changed title from [PR #923] [CLOSED] fix: выбор IP датацентра с учётом медиа-трафика to [PR #923] fix: выбор IP датацентра с учётом медиа-трафика 2026-07-20 04:11:04 +03:00
mirror-bot changed title from [PR #923] fix: выбор IP датацентра с учётом медиа-трафика to [PR #923] [CLOSED] fix: выбор IP датацентра с учётом медиа-трафика 2026-07-20 23:14:56 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Utilities/tg-ws-proxy#72