【问题标题】:Why can't different servers bind to the same port?为什么不同的服务器不能绑定到同一个端口?
【发布时间】:2013-08-26 21:14:39
【问题描述】:

我对端口感到困惑。

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

示例: Apache绑定在8080上,Express.js不能绑定在8080上

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

示例: 不同的浏览器,比如chrome、firefox,可以在80端口监听和通信吗?

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

【问题讨论】:

    标签: apache express gruntjs


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答,我不知道客户端上的端口是随机的且不同的。可以绑定到同一个端口也是有道理的,只是不经常这样做,因为额外的复杂性并不值得。
    【解决方案2】:

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

    多个应用可以同时访问网络的原因是因为它们的访问方式不同 - 它们使用未使用的端口(可能是 62332 之类的端口)并且只有 destination 是例如 80 端口。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      相关资源
      最近更新 更多