如题,是我哪里理解不对么?求指点。
不明白你的点在哪里,你的疑问和前段所描述的原理并不冲突。
服务端都是多进程或者多线程又或者使用了代理等等,一个链接进来,会交由一个子进程/线程/一台web服务器进行处理,并不影响接下来的请求。
猜测题主可能是混淆了socket和port这两个概念。
打个(可能不太恰当的)比方,port就是门牌号,你一家住进去了,如果不搬出来,下一家不能进。socket就是快递编号,可以同时给你们家寄好几件快递。port只不过是在网络中标识了一个进程,socket才是数据交换的端点。
节选一下 man accept,翻译成中文是这样的
It extracts the first connection request on the queue of pending connections for the listening socket, sockfd, creates a new connected socket, and returns a new file descriptor referring to that socket. The newly created socket is not in the listening state. The original socket sockfd is unaffected by this call.它(accept)从监听套接字sockfd的队列中取出第一个请求,创建一个新的连接socket,然后返回一个指向新socket的文件描述符。这个新socket并不在监听状态。原本的socketsockfd不会被这个调用改变。
所以跟“切换的够快”、“子进程/线程”、“Nginx的配置”都无关,它们只是后续用来处理这些新socket的方法,是一个一个处理,还是一起处理,相当于你快递可以一件一件收,也可以请快递员用推车一起送上来。但是能支持多连接,本质上还是因为每个客户端连接都有一个新的socket,互不相干,可以分别处理。
系统区分socket,靠的则是五元组。因为两个IP都是不能变的,只能靠端口号来区分应用程序,所以要求一个端口只能由一个程序使用。
7 回答5.3k 阅读
3 回答2k 阅读✓ 已解决
4 回答4k 阅读
2 回答3.9k 阅读✓ 已解决
2 回答5.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
抛砖引玉
Nginx
并启动监听80
端口,但此时你又下载一个Apache
想启动也去监听80端口,这时服务器就不让了,会提示端口被占用,这就是一个端口对应一个应用程序
。80
端口,假设服务器使用Nginx
,当Nginx
监听到有客户请求自己监听的80
端口时,会根据请求做出相应的相应,至于为什么可以同时链接多个用户,那得看服务器的本身配置了,可以同时允许多少个用户同时访问,若是仅允许一个,那么第一个进来了,接下来的就顺次排队,服务器处理一个之后会接下往下处理