HTTP-прокси-сервер на C#
-
22-08-2019 - |
Вопрос
Моя компания экспериментирует с написанием прокси-сервера с использованием .NET Fx 3.5 и C#.От нашего исследовать Я читал, что HttpListener не является хорошим кандидатом на роль прокси-сервера, хотя не знаю, почему.
В настоящее время мы работаем с Исходный код примера прокси Mentalis хотя это потребует, среди прочего, внедрения наших собственных счетчиков журналирования и производительности.Использование HttpListener обертывает Http.sys, что дает нам некоторую необходимую статистику производительности из коробки.
Так почему же HttpListener — плохой кандидат для работы с HTTP-прокси?
(И да, мы рассматриваем Squid 3.1, написав или настроив ICAP-сервер.)
Решение
HttpListener находится в .NET и представляет собой основной строительный блок для простой HTTP-сервер.Там, где просто, подразумевается отсутствие поддержки высоких скоростей операций.
Обычно HTTP-прокси должны иметь очень низкие накладные расходы, чтобы поддерживать множество одновременных соединений, а также обеспечивать функцию прокси (которая зависит от типа прокси).
Прокси подробно описаны в RFC 2616 §8.1.3), и это сразу же предоставляет один элемент, который (если я правильно понимаю HttpListener) невозможен:
Прокси-сервер ДОЛЖЕН сигнализировать о постоянных соединениях отдельно со своими клиентами и исходными серверами (или другими прокси-серверами), к которым он подключается.Каждое постоянное соединение применяется только к одному транспортному каналу.
Другие советы
Вы также можете подумать, что порт nginx для Windows был выпущен несколько дней назад.Многие сайты, имеющие опыт работы с squid и лаком, очень довольны переходом на nginx.Кроме того, в наши дни MS всегда вызывает ISA-сервер.
Ушел смотреть код Mentalis :D