0

我正在尝试创建自己的 Web 服务器,并且有几个关于我们今天使用的 Web 服务器工作的问题。问题是:

  1. 从客户端通过 80 端口收到 HTTP 请求后,服务器是否使用相同的 80 端口进行响应?
  2. 如果是,那么在发送大文件时说 MB 的图片,网络服务器将无法接收来自其他客户端的请求?
  3. 计算机端口是双工还是单工?(它可以同时发送和接收)?
  4. 如果服务器端的另一个端口用于向客户端发送响应,那么(如果使用 TCP,通常使用),将再次进行 3 次握手,这将是开销......
4

2 回答 2

1

http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html这里是关于网络服务器发生了什么的一个很好的指南,虽然它是在 c 中,但概念都在那里。这将解释整个客户端服务器关系以及一些实现细节。

我将简要介绍正在发生的事情:通常会发生什么是当您的服务器收到一个新请求时,它会创建一个处理它的分叉,这样您就不会被每个请求所困扰,当请求进来的子进程被交给一个新的文件来写入(这也是所有的实现细节)。

所以实际上你有一个服务器在等待请求,并且对于它收到的每个请求,它都会产生一个子进程来处理这个请求。我敢肯定有比 c 更容易实现这些东西的语言(我过去必须同时为任何一个提供 ac 和 java 服务器)但是 c 真的让你了解正在发生的事情,我打赌这就是您在这里寻找的东西

现在有几件事需要考虑:您希望网络服务器如何工作。该示例解释了父子进程。您是否想使用 tcp/UDP 传递有效载荷的方式有所不同。您不必连接端口 80。这只是 web 的默认设置。

希望该指南对您有所帮助。

于 2013-10-07T17:23:18.493 回答
0
  1. 是的。服务器使用客户端建立的 TCP 连接发送响应,因此它也使用相同的端口进行响应。服务器可以使用同一端口处理来自多个客户端的连接,因为 TCP 连接由 (local-ip, local-port, remote-ip, remote-port) 标识,因此服务器甚至可以处理来自同一客户端的多个连接,前提是源端口不同。
  2. 您可以使用不同的技术来同时为多个客户提供服务。这些包括

    • 使用多个进程或线程:当一个人忙于为客户服务时,其他人可以为其他客户服务。
    • 使用事件:服务器侦听来自操作系统的事件:当它可以将数据块写入连接时,它会写入它,当新客户端连接时,它会接受连接,...

    两种方法经常结合使用。

  3. TCP 连接是双工的:您可以同时发送和接收。HTTP 协议基于一个简单的请求-响应模型:在任何给定时间,只有一方在“交谈”。
于 2013-10-07T17:13:04.230 回答