2013-10-07 45 views
0

我想创建一个我自己的Web服务器,并且有关于我们今天使用的Web服务器的工作的几个问题。问题是:实现一个Web服务器

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

回答

1

http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html这里是发生了什么事情与Web服务器具有很好的指导,虽然这是在C,但这些概念都在那里。这将解释整个客户端服务器关系以及一些实现细节。

我只想给出一个关于发生了什么的高层次: 通常会发生什么情况是当您的服务器收到一个新的请求时创建一个将处理它的分支,这样您就不会被每个分支请求,当请求进入子进程时,传递一个新文件来写入(同样这是所有的实现细节)。

所以你真的有一台服务器在等待请求,并为它收到的每个请求生成一个子进程来处理这个请求。我确信有比c更容易实现这些东西的语言(我必须在我以前同时执行ac和java服务器服务),但c真的让你了解正在发生的事情,而且我赌注,这就是你在这里寻找

现在有几件事情要考虑: 你想如何工作的web服务器。该示例解释了父级子进程。 你是否想要使用tcp/UDP在传递有效载荷的方式上存在差异。 您不必在端口80上连接,这只是web的默认设置。

希望导游会帮助你。

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

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

    常见两种方法都要结合在一起。

  3. TCP连接是双工的:您可以同时发送和接收。 HTTP协议基于一个简单的请求 - 响应模型:在任何时候,只有一方正在“交谈”。
+0

我的重点是服务器端口。该端口是否可以向客户端发送响应并同时侦听新的客户端请求?如果是,那么编程方式如何?如果没有,那么使用什么技术来避免服务器必须发送大文件(比如图像文件)的这种情况,并且同时可以随时用于传入的客户端请求... –

+0

是的,它可以,并且这是在所有套接字API是用于接受连接的套接字与用于与客户端通信的套接字分开的。我建议你在你喜欢的操作系统上找到你喜欢的编程语言的网络编程教程,因为它可以解释所有这些...... – Joni

+0

你可以在c或Java代码上实现这一行:“用于接受连接的套接字是独立的来自用于与客户沟通的套接字。“ ?。 (因为他们说)是 ServerSocket welcomeSocket = new ServerSocket(6789);因为当我在Java中查看任何教程时,它的完成方式(如他们所说)是 ServerSocket welcomeSocket = new ServerSocket(6789); (true){ \t Socket connectionSocket = welcomeSocket.accept(); 现在这里如果我通过tcpdump或netstat监视我的网络活动或列出nmap等开放端口,它不会显示任何其他端口(除了onServer正在侦听)用于向客户端发送数据。 –