Все локации активны · 99.99% uptime
Протоколы

Keep-Alive и пул соединений в прокси

Самое эффективное единичное изменение для повышения производительности прокси — вовсе не покупка более быстрого прокси, а переиспользование уже установленного соединения. Клиент, открывающий новое соединение на каждый запрос, постоянно платит стоимость его установки, и через прокси эта стоимость удваивается.

Реальная стоимость установки соединения

СХЕМАЭтапы первого соединения через прокси
НАСТРОЙКА01DNSразрешение~20 msАдрес проксидля02TCP-рукопожатие~35 msКлиент ↔ прокси03Аутентификация на прокси~35 ms407 → повторнаяотправка04CONNECTтуннель~35 msОткрытие туннеля05TLS-рукопожатие~70 msКлиент ↔ цель06Первый запроспеременнаяСобственно данныеитого ~200 ms постоянных издержек

Эти 200 ms оплачиваются заново при каждом новом соединении. Если вы отправляете 1 000 запросов и каждый раз открываете новое соединение, только на установку уйдёт 200 секунд.

Как работает Keep-Alive?

В HTTP/1.1 соединения по умолчанию постоянны: после получения ответа соединение не закрывается, и следующий запрос отправляется через тот же сокет. Это поведение нарушают три вещи:

  • Сервер Connection: close отправляет — соединение закрывается.
  • Клиент создаёт новый объект сессии на каждый запрос — пул не работает вовсе.
  • Превышено время простоя — прокси или сервер разрывает соединение.
Самая распространённая ошибка

Создание в коде на каждый запрос нового объекта Session, Client или Agent . Это полностью отключает переиспользование соединений, какой бы ни была ваша конфигурация пула.

Правильная конфигурация

СХЕМАПереиспользование соединения
Настройка пула по языкам01# Python requests — Session создаётся один раз02import requests03session = requests.Session()04session.proxies = {"https": "http://kullanici:sifre@proxy.example.com:8080"}05adapter = requests.adapters.HTTPAdapter(pool_connections=16, pool_maxsize=16)06session.mount("https://", adapter)07for url in urls:08 r = session.get(url, timeout=25) # переиспользуется то же соединение0910# Python httpx — задайте лимиты явно11import httpx12limits = httpx.Limits(max_connections=16, max_keepalive_connections=16,13 keepalive_expiry=60.0)14client = httpx.Client(limits=limits, proxy=PROXY, timeout=25.0)1516# Node.js undici17import { Agent, setGlobalDispatcher } from "undici";18setGlobalDispatcher(new Agent({ connections: 16, keepAliveTimeout: 60_000 }));

Держите размер пула чуть ниже лимита параллелизма вашего провайдера. При превышении лишние соединения будут устанавливаться и сразу закрываться.

Каков выигрыш?

СХЕМАОбщее время для 1 000 запросов
ИЗМЕРЕНИЕ061122183244Без пула (новое соединение)С пулом (keep-alive)1002505007501000

В приведённом измерении использование пула сокращает общее время примерно втрое. Выигрыш тем больше, чем выше задержка до прокси.

Переиспользование TLS-сессии

Помимо пула соединений есть и второй источник выигрыша: TLS session ticket. При повторном подключении к той же цели вместо полного рукопожатия можно выполнить сокращённое. Большинство современных клиентов делает это автоматически; важно лишь переиспользовать объект клиента.

СХЕМАПолное и сокращённое TLS-рукопожатие
TLSПолное рукопожатиеПереиспользование сессииЧисло кругов2 RTT1 RTTПередача сертификатаЕстьНетВычисление ключаПолныйСокращённоеТипичное время70–140 ms30–60 msУсловиеПервое соединениеТот же объект клиента

Если вы пересоздаёте объект клиента на каждый запрос, session ticket теряется и каждый раз выполняется полное рукопожатие.

Баланс времени простоя

Слишком долго держать соединение открытым тоже опасно: прокси или целевой сервер может без уведомления разорвать его, и ваш клиент заметит это только на следующем запросе. Отсюда и берётся шаблон «первый запрос падает, второй проходит».

ПараметрРекомендуетсяПочему
keepalive_expiry30–60 сДолжно быть меньше серверного тайм-аута
Размер пулаНиже лимита параллелизмаИзлишек — рукопожатия впустую
Повторная попытка1 разКомпенсирует разорванное соединение
Предельный срок жизни соединения5–10 минДолгоживущие соединения «протухают»
Практическая рекомендация

Держите время простоя меньше серверного тайм-аута. Тогда соединение закрываете вы, и ситуация «сервер закрыл, а я об этом не знаю» не возникает.

Противоречие с ротацией

Переиспользование соединения и ротация IP естественным образом противоречат друг другу: использовать то же соединение — значит оставаться на том же исходящем IP. Это не проблема, а вопрос выбора:

СХЕМАПул или ротация?
РЕШЕНИЕОставаться на том же IP — проблема?Нет, нужна сессияДАВыставьте пул на максим…НЕТСмотрите нижеПрирост скорости максимальныйОтчасти — какое-то время IP может быть тем жеДАПул + периодическое обн…НЕТСмотрите нижеТочка балансаДа, на каждом запросе нужен другой IPДАОтключите пулНЕТПримите издержки по скор…

В большинстве сценариев верен второй вариант: переиспользуйте соединение какое-то время (например, 30 запросов или 5 минут), затем обновляйте его.

О стратегиях ротации — в нашей статье о настройках ротации можно посмотреть.

Резюме

Keep-alive и пул соединений — самый мощный единичный рычаг в производительности прокси. Создайте объект клиента один раз и переиспользуйте его, держите размер пула ниже лимита провайдера, задайте время простоя меньше серверного тайм-аута и добавьте одну повторную попытку. Если нужна ротация, вместо отключения пула предпочтите периодическое обновление. Для измерения тест пинга и проверка proxy вы можете воспользоваться нашими инструментами.

Часто задаваемые вопросы

01Работает ли keep-alive через прокси?

Да. После установки туннеля CONNECT через тот же туннель можно пропускать несколько запросов. В обычном HTTP-прокси постоянные соединения тоже поддерживаются.

02Как выбрать размер пула?

Держите его чуть ниже лимита параллелизма вашего провайдера. При превышении лишние соединения будут устанавливаться и сразу закрываться, а стоимость рукопожатия уйдёт впустую.

03Первый запрос падает, последующие работают — почему?

Соединение в пуле могло быть без уведомления закрыто сервером. Держите время простоя меньше серверного тайм-аута и добавьте одну повторную попытку.

04Мешает ли пул соединений ротации IP?

Да, одно и то же соединение остаётся на одном исходящем IP. Если нужна ротация, не отключайте пул полностью, а обновляйте соединение после определённого числа запросов или по истечении заданного времени.

05Что даёт переиспользование TLS-сессии?

Вместо полного рукопожатия выполняется сокращённое; обычно это экономит один круг и 40–80 ms. Достаточно переиспользовать объект клиента.

Связанные статьи и страницы

СЛЕДУЮЩИЙ ШАГ

Усильте свою прокси-инфраструктуру уже сегодня.

Начните с платным тарифом за считанные минуты или сначала попробуйте наш бесплатный список прокси.

FREEPROXY.TR

Ищете бесплатные прокси — вы попали по адресу

Комплексная прокси-платформа, где можно посмотреть актуальные адреса бесплатных прокси, сравнить типы HTTP и SOCKS и проверить свои прокси-подключения бесплатными инструментами.