【问题标题】:HTTP communication on port 80端口 80 上的 HTTP 通信
【发布时间】:2012-01-21 10:40:43
【问题描述】:

我想了解 Web 服务器如何处理大量同时发生的 HTTP 请求和响应。请记住,我是网络编程新手。

Web 服务器可以同时在端口 80 上发送多个 HTTP 响应吗?还是必须“序列化”响应?

Web 服务器是否以序列化方式接收请求?如果是这样,那么插入优先级队列可能需要很快。

【问题讨论】:

    标签: httpwebrequest webserver httpresponse priority-queue port80


    【解决方案1】:

    简短的回答是,大多数 Web 服务器将通过在单独的线程/进程上处理每个请求(通过从线程池中提取线程或创建新线程)来并行处理传入请求。通常,可以同时处理的请求数是有上限的(例如线程池中的最大线程数)。超出该上限意味着待处理的请求将在队列中等待,直到另一个请求完成。如果服务器需要对请求做一些异步处理,它可能会将线程返回到线程池,直到它准备好完成请求(如 ASP.NET 中的 IHttpAsyncHandler )。

    服务器实际上并没有在端口 80 上发回请求。客户端将有自己的端口用于该特定连接。

    【讨论】:

    • epoll 是 ASP.NET 中 IHttpAsyncHandler 的 Linux 等价物吗?
    • @MrMusic 虽然我不是 Linux 网络方面的专家,但我相信 epoll 更类似于 Windows 中的 I/O 完成端口。 Web 服务器,如 Apache 或 IIS,将使用 epoll 或 I/O 完成端口从网络套接字异步读取数据。通常,Web 服务器中运行着一个应用程序模型(例如 Apache 中的 PHP 模块或 IIS 中的 ASP.NET)。一些应用程序模型允许您在处理服务器请求时将线程“释放”回线程池。 Node.js 是一个尝试异步执行几乎所有操作的服务器示例。
    【解决方案2】:

    我也是新手,但对网络通信有点了解。

    它不会同时响应多个请求,一次一个,在正常运行时非常非常快。

    当信息通过网络发送出去时,无论它是什么端口,它都会以数据包的形式发送出去。 在该数据包中是标头,在您询问的情况下,它定义了它尝试使用的端口号和其他需要的信息。 标题之后是数据。数据包中数据的大小因设置而异,即计算机、路由器/交换机以及涉及的任何其他内容。 最后是页脚,其中包含有关是否是针对该特定请求的最后一个数据包的说明,如果不是,则在下一个数据包中查找什么。

    希望这有助于回答您的问题,并可能给您提供更多问题。

    【讨论】:

    • 我喜欢 Caleb 的回答。更倾向于网络服务器功能。对不起,如果我的不是你要找的。​​span>
    猜你喜欢
    • 2023-02-25
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多