LINUX.ORG.RU

asyncio и http(s) прокси

 


1

1

Привет, lor!

Имеется http прокси. Для получения запросов открываю сокет socket.create_server; если приходит CONNECT, отправляю 200 Connection Established, а затем заворачиваю сокет в ssl контекст context.wrap_socket.

Появилось желание переписать с использованием логики asyncio. Не понимаю, как StreamReader завернуть в ssl. В документации вижу, что можно открыть либо plain http, либо сразу ssl; но как тогда обработать запрос CONNECT?

Благодарю за помощь.

★★

Ответ на: комментарий от eternal_sorrow

Просто самописный прокся вида man-in-the-middle. Расшифровывает и плотно сжимает траффик. Нужного функционала у готовых решений не встречал. К примеру, весь траффик до клиента принудительно заворачивается в HTTP/2 для сжатия заголовков.

rmu ★★
() автор топика
Ответ на: комментарий от eternal_sorrow

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

rmu ★★
() автор топика
Ответ на: комментарий от eternal_sorrow

Вчера испытал 3 решения сервера: asyncio, threading, asyncore тестом:

hey -n 10000 -x 'http://0.0.0.0:3333' https://example.com/

К моему удивлению, относительно новый asyncio работает практически вровень со threading. Все три решения в режиме https обрабатывают 10000 запросов примерно за 30 сек. на моём ноуте, здесь разницы не видно. А вот с чистым http, deprecated asyncore справляется в 3 раза быстрее двух других. Вопрос, зачем его закапывают, когда он лучше остальных справляется с потоком запросов?

rmu ★★
() автор топика
Ответ на: комментарий от eternal_sorrow

Я для себя разбираюсь, как работает async/await. Основы понял, можно и фреймворк попробовать.

rmu ★★
() автор топика
Ответ на: комментарий от eternal_sorrow

Фантастики не наблюдается: aiohttp в равных условиях справляется с 10000 запросов за 17 сек. (чистый asyncio 18), а asyncore за 8. Выбор однозначный в пользу asyncore.

А ещё asyncore работает напрямую с сокетами, логику не придётся переписывать.

rmu ★★
() автор топика
Последнее исправление: rmu (всего исправлений: 1)
11 января 2022 г.
Ответ на: комментарий от rmu

Поподробнее пожалуйста: какие решения в итоге использовал для своего домашнего прокси, как прикрутил туда сжатие в avif?

Такое не пробовал с webp: https://github.com/barnacs/compy ?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.