【问题标题】:HTTP Proxy server in C#C# 中的 HTTP 代理服务器
【发布时间】:2010-10-17 03:49:01
【问题描述】:

我的公司正在尝试使用 .NET Fx 3.5 和 C# 编写代理服务器。在我们的research 中,我了解到 HttpListener 不是代理服务器的理想选择,尽管我不确定为什么。

我们目前正在使用Mentalis proxy example source code,但除其他外,这将涉及实现我们自己的日志记录和性能计数器。使用 HttpListener 将包装 Http.sys,这将为我们提供一些开箱即用的性能统计信息。

那么为什么 HttpListener 不适合 HTTP 代理工作呢?

(是的,我们正在通过编写或配置 ICAP 服务器来考虑 Squid 3.1。)

【问题讨论】:

    标签: c# proxy httplistener


    【解决方案1】:

    HttpListener 在 .NET 中为 simple HTTP 服务器提供主要构建块。简单包括不支持高操作率。

    通常 HTTP 代理需要非常低的开销来支持许多并发连接以及提供代理的功能(这取决于代理的类型)。

    代理在RFC 2616 §8.1.3 中有详细说明,并且立即提供了一项(如果我正确理解 HttpListener)是不可能的:

    代理服务器必须分别与它的客户端和它所连接的源服务器(或其他代理服务器)发出持久连接信号。每个持久连接仅适用于一个传输链路。

    【讨论】:

    • IIS 不使用 http.sys 吗?我没有关注它为什么不适合用作代理服务器
    • Http.sys 用于编写 HTTP 服务器,HTTP 代理不仅仅是调用另一个 HTTP 服务器的 HTTP 服务器。关于 HttpListener 用于“简单”案例的注释来自 MSDN (IIRC)。
    【解决方案2】:

    你可能还认为 nginx 的 windows 端口是前几天发布的。许多有squid 和varnish 经验的站点在转换为nginx 后都非常高兴。然后,这些天总是有任何 MS 调用 ISA 服务器。

    现在去看看 Mentalis 代码:D

    【讨论】: