1

ポートについて混乱しています。

異なるサーバーを異なるポートにバインドする必要があるのは奇妙なことです。

例: 8080 でバインドされた Apache、Express.js は 8080 でバインドできません

サーバーのポート バインドは、アプリケーションのポート リッスンとどのように異なりますか?

例: さまざまなブラウザー (つまり、chrome、firefox) は、ポート 80 でリッスンして通信できますか?

この問題は、「grunt test:unit」を実行しようとしたときに発生しました。すでに 8080 にバインドされている tomcat サーバーがありましたが、サーバーのうなり声が起動し、ミドルウェアは起動できると思いますが、ブラウザーをキャプチャすることはできません。Tomcatサーバーを停止すると、機能しました。

4

2 に答える 2

4

実際、Firefox や Chrome などは異なるソース ポートを使用します。ポートをリッスンしません。リモートサーバーに接続します。サーバーは 1 つのポート (80) でリッスンしています。ブラウザーが接続する送信元ポートはランダムに選択され、高い数値です。これは、 を使用して確認できますnetstat。宛先ポートは同じ (80) です

複数のサーバーを同じポート*にバインドできない理由は、オペレーティング システムが着信接続をどのアプリケーションに渡すかを認識できないためです。

*実際にはできますが、複雑です。 SO_REUSEPORT

于 2013-08-26T21:19:59.377 に答える
1

一度に 1 つのアプリケーションのみがポートを制御/リッスンできる理由は次のとおりです: OS がポート 80 などの要求を受信し、2 つのアプリがそれをリッスンしている場合、どのアプリを渡すかをどのように知ることになっていますか?へのリクエストで?

複数のアプリが一度に Web にアクセスできる理由は、それらが同じ方法でアクセスしないためです。たとえば、未使用のポート (おそらく 62332 など) を使用し、宛先のみがポート 80 です。

これがポートの目的です。マシンごとに複数のサーバーを同時に実行できるようにするためです。

于 2013-08-26T21:22:39.547 に答える