为什么不同的服务器不能绑定到同一个端口?

时间:2013-08-26 21:14:39

标签: apache express gruntjs

我对端口感到困惑。

我觉得很奇怪,我们需要将不同的服务器绑定到不同的端口。

实施例: Apache绑定8080,Express.js无法绑定8080

服务器端口绑定与应用程序端口侦听有何不同?

实施例: 不同的浏览器,即chrome,firefox,可以在端口80上监听和通信吗?

尝试运行“grunt test:unit”时出现此问题。有一个已经绑定到8080的tomcat服务器,但是服务器grunt启动,我相信中间件能够启动,但它无法捕获浏览器。停止tomcat服务器使事情有效。

2 个答案:

答案 0 :(得分:4)

实际上,Firefox,Chrome等使用不同的源端口。他们不听港口;他们连接到远程服务器。服务器正在侦听一个端口(80)。浏览器连接的源端口是随机选择的,并且是一个很高的数字。您可以使用netstat进行检查。他们的目的地端口是相同的(80)。

您不能让多个服务器绑定到同一个端口*的原因是操作系统不知道将传入连接传递给哪个应用程序。

实际上,你可以,但它很复杂。 SO_REUSEPORT

答案 1 :(得分:1)

一次只有一个应用程序可以控制/侦听端口的原因是: 当操作系统收到端口80的请求,并且有两个应用程序正在监听时,它应该如何知道将请求传递给哪个应用程序?

多个应用程序可以同时访问Web的原因是因为它们没有以相同的方式执行 - 它们使用未使用的端口(可能是62332或其他类似的东西)而只有目标是例如,端口80。

这就是端口的用途 - 这样你就可以在每台机器上同时运行多个服务器。