Web服务器如何使用同一端口(80)为其客户端提供TCP连接。对于udp连接,我知道没有连接,所以我们可以让多个客户机将数据包发送到同一端口。如果我尝试在本地主机上使用一个已经使用的端口,就会得到bindexception。
我看到的一个解决方案是为每个连接启动一个线程,但是对于像google/yahoo这样的站点来说,如果每个服务器有超过100000个连接,这会不会很麻烦呢?
对于这个问题,web服务器采用什么解决方案?
最佳答案
服务器监听一个众所周知的端口(80),并在收到请求后将请求委托给一个工作套接字。这样就可以满足下一个请求。您可以编写自己的简单服务器来了解发生了什么。Oracle站点有一个很好的示例代码。〔1〕
[1]http://java.sun.com/developer/technicalArticles/Networking/Webserver/WebServer.java
首先它创建一个服务器套接字;
ServerSocket ss = new ServerSocket(port);
然后它在指定的端口上列出,并在接受请求后创建一个新的套接字;
Socket s = ss.accept();
如代码所示,它有一个工作线程池,因此在给定的时刻,您可以控制服务器在给定的时间内接收到的请求的数量。其他人可能在排队等候。