我对港口感到困惑。
我觉得奇怪的是,我们需要将不同的服务器绑定到不同的端口。
例如:Apache绑定在8080上,Express.js不能绑定在8080上
服务器端口绑定与应用程序端口监听有什么不同?
例如:不同的浏览器,即chrome,firefox,可以在端口80上监听和通信吗?
试图运行“grunt test:unit”时出现这个问题。 有一个已经绑定到8080的tomcat服务器,但服务器grunt启动,我相信中间件能够启动,但它无法捕获浏览器。 停止tomcat服务器使事情工作。
实际上,Firefox,Chrome等使用不同的源端口。 他们不听港口; 他们连接到远程服务器。 服务器正在侦听一个端口(80)。 浏览器连接的源端口是随机选择的,并且是一个高数字。 你可以使用netstat
来检查这个。 他们的目的地港口是一样的(80)。
你不能让多个服务器绑定到同一个端口*是因为操作系统不知道哪个应用程序将一个传入的连接切换到。
*其实,你可以,但是很复杂。 SO_REUSEPORT
一次只能有一个应用程序可以控制/监听一个端口的原因是:当操作系统收到端口80的请求,并且有两个应用程序在监听时,应该如何知道哪个应用程序要通过请求?
多个应用程序可以一次访问网络的原因是因为他们不这样做 – 他们使用一个未使用的端口(可能类似62332或其他),只有目的地是端口80,例如。
这就是端口的用途 – 所以你可以在一台机器上同时运行多个服务器。