Kak-dizajneru-vesti-Telegram-kanal-sovety-eksperta

TG WS Proxy: Ускоряем Telegram на своем пу через WebSocket

Почему Telegram на macOS стал медленнее и как это исправить

Telegram — один из самых популярных мессенджеров, но пользователи macOS всё чаще жалуются на медленную загрузку фото и видео. Причина не всегда кроется в скорости интернета. Зачастую проблема — в особенностях TCP-соединений с серверами Telegram.

Неочевидное решение: WebSocket Secure

Исследуя эту проблему, я обнаружил, что перенаправление трафика через WebSocket Secure (WSS) позволяет значительно ускорить работу мессенджера. WebSocket работает поверх TLS и оптимизирован для долгоживущих соединений — именно то, что нужно для мессенджера.

Проблема была в отсутствии готового решения для macOS. Так появилась идея создать нативное приложение, которое работает в фоне, не отвлекает пользователя и эффективно ускоряет Telegram.

Почему это работает

Стандартный TCP-трафик Telegram подвержен:

  • Throttling’у — провайдеры намеренно замедляют «неприоритетный» трафик
  • Потере пакетов на длинных маршрутах
  • Высокой задержке из-за алгоритмов контроля перегрузки

WebSocket поверх TLS (WSS) использует порт 443 — тот же, что и HTTPS. Это даёт ключевые преимущества:

  • Обход throttling’а — провайдеры реже ограничивают HTTPS-трафик
  • Мультиплексирование — несколько соединений в одном TCP-потоке
  • Меньше накладных расходов на установку соединения

Как это работает

Приложение действует как прозрачный прокси:

  1. Локальный SOCKS5-сервер поднимается на 127.0.0.1:1080
  2. Анализ трафика — прокси перехватывает подключения к IP-адресам Telegram
  3. Определение DC — из MTProto obfuscation init-пакета извлекается ID дата-центра
  4. WebSocket-соединение — устанавливается TLS-соединение к соответствующему DC через домены kws{N}.web.telegram.org
  5. Fallback-механизм — если WebSocket недоступен (например, 302 redirect), происходит автоматическое переключение на прямое TCP-соединение

Архитектура приложения

Проект состоит из двух компонентов:

1. Ядро прокси

  • Асинхронность — на базе asyncio для максимальной производительности
  • Пул соединений — переиспользование WebSocket-соединений для ускорения
  • Автоматическое определение DC — без необходимости ручной настройки

2. GUI-обёртка

  • Иконка в системном трее macOS
  • Управление прокси: запуск, остановка, перезапуск
  • Настройки: изменение порта, добавление DC-серверов

Ключевые технические решения

Пул WebSocket-соединений

Для ускорения повторных подключений реализован пул с предварительным прогревом:

class _WsPool:
    def __init__(self):
        self._idle: Dict[Tuple[int, bool], list] = {}
        self._refilling: Set[Tuple[int, bool]] = set()
    
    async def warmup(self, dc_opt):
        # Предварительное подключение ко всем DC
        for dc, target_ip in dc_opt.items():
            for is_media in (False, True):
                self._schedule_refill((dc, is_media), target_ip)

Это позволяет сократить задержку при первом подключении к дата-центру.

Автоматическое определение DC

Прокси анализирует первые 64 байта MTProto-соединения и извлекает ID дата-центра. Это критически важно для правильной маршрутизации, так как разные DC находятся в разных географических регионах.

Fallback на TCP

Если WebSocket по какой-либо причине недоступен, прокси автоматически переключается на прямое TCP-соединение. Это гарантирует работоспособность даже при проблемах с WebSocket-инфраструктурой Telegram.

Преимущества для пользователя

  • Никаких терминалов — установка как обычной программы
  • Никаких настроек — всё работает сразу после установки
  • Бесплатно — полностью открытый исходный код

Заключение

Надеюсь, этот опыт будет полезен другим разработчикам, а само приложение — пользователям macOS, которые хотят вернуть Telegram былую скорость.

ссылка на git hab https://github.com/Maxim-szh/tg-ws-proxy-mac

Метки: нет меток

Добавить комментарий

Your email address will not be published. Required fields are marked *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.