如何解决网络服务器是否使用一个端口处理所有请求?
如果Web服务器正在端口80上处理流量,则每个客户端必须在其自身与该端口上的服务器之间建立连接。假设客户端维护了连接,那么服务器如何并行服务其他客户端?
服务器是否在请求后立即终止与客户端的连接?还是网络服务器会动态生成新端口供客户端使用,以使80端口免费用于新连接?
解决方法
端口是通信通道的一端。
服务器缩写设置了LISTENing端口(对于HTTPS服务器为80)。客户端创建一个端口(操作系统将为此分配一个随机的可用端口号),并连接到侦听端口。此时,通信通道由服务器的IP地址,服务器上的端口80和客户端的IP地址以及客户端的端口号唯一描述。如果您查看netstat
的输出,则会在连接的各个阶段看到很多套接字/端口:
symcbean@skynet ~ $ netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.1.202:47206 stackoverflow.com:https ESTABLISHED
tcp 0 1 192.168.1.202:50894 aba1c1ff9d2ec5376.:smtp SYN_SENT
tcp 0 0 192.168.1.202:47210 stackoverflow.com:https ESTABLISHED
tcp 0 0 192.168.1.202:60806 ec2-34-213-90-136:https ESTABLISHED
tcp 0 0 192.168.1.202:51124 151.101.1.69:https ESTABLISHED
tcp 0 0 192.168.1.202:34784 i0.wp.com:https ESTABLISHED
tcp 0 0 192.168.1.202:54082 lhr25s14-in-f10.1:https ESTABLISHED
tcp 0 0 192.168.1.202:38412 172-155-250-212.s:https ESTABLISHED
服务器处理多个通道上的并发通信的确切方式有所不同。我从来没有遇到过一次只能处理一个连接的服务器。
在(预分支)Apache Web服务器上,打开侦听套接字的进程将断开与先前要处理的子进程的连接。一些服务器作为单个进程运行,但是具有多个执行线程。有些(例如nginx和lighthttpd)是作为单个线程运行的,它们将注意力放在首先发送数据的通道上。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。