0

独自の Web サーバーを作成しようとしていますが、現在使用している Web サーバーの動作についていくつか質問があります。質問は次のとおりです。

  1. ポート 80 を介してクライアントから HTTP 要求を受信した後、サーバーは同じポート 80 を使用して応答しますか?
  2. はいの場合、MB 単位で大きなファイルを送信しているときに、Web サーバーは他のクライアントからの要求を受信できなくなりますか?
  3. コンピュータのポートはデュプレックスですか、それともシンプレックスですか? (同時に送受信できますか)?
  4. サーバー側の別のポートを使用してクライアントに応答を送信すると、(一般的に使用される TCP が使用されている場合) 再び 3 ウェイ ハンドシェイクが行われ、オーバーヘッドが発生します...
4

2 に答える 2

1

http://beej.us/guide/bgnet/output/html/singlepage/bgnet.htmlこれは Web サーバーで何が起こっているかについての優れたガイドです。C 言語ですが、概念はすべてそこにあります。これにより、クライアントとサーバーの関係全体と実装の詳細が説明されます。

何が起こっているかについて大まかに説明します。通常、サーバーが新しいリクエストを受け取ると、それを処理するフォークが作成されます。リクエストが子プロセスに入ると、書き込み先の新しいファイルが渡されます(これもすべての実装の詳細です)。

実際には、リクエストを待機しているサーバーが 1 つあり、受信したリクエストごとに、このリクエストを処理するために処理する子を生成します。cよりもこのようなものを実装するのにはるかに簡単な言語があると確信しています(私は過去にどちらか一方にサービスを提供するacとjavaサーバーの両方を実行する必要がありました)が、cは実際に起こっていることを理解してくれます。それがあなたがここで探しているものです

Web サーバーをどのように機能させたいかということです。例では、親子プロセスについて説明します。tcp/UDP を使用しますか?ペイロードが配信される方法に違いがあります。ポート 80 で接続する必要はありません。これは Web のデフォルトです。

ガイドがお役に立てば幸いです。

于 2013-10-07T17:23:18.493 に答える
0
  1. はい。サーバーは、クライアントによって確立された TCP 接続を使用して応答を送信するため、同じポートを使用して応答します。TCP 接続は (local-ip、local-port、remote-ip、remote-port) によって識別されるため、サーバーは同じポートを使用する複数のクライアントからの接続を処理できます。ソース ポートが異なります。
  2. 同時に複数のクライアントにサービスを提供できるようにするために使用できるさまざまな手法があります。これらには以下が含まれます

    • 複数のプロセスまたはスレッドを使用する: 1 つがクライアントにサービスを提供しているときに、他のプロセスが他のクライアントにサービスを提供できます。
    • イベントの使用: サーバーは OS からのイベントをリッスンします: データのブロックを接続に書き込むことができる場合はそれを書き込み、新しいクライアントが接続すると接続を受け入れます...

    多くの場合、両方のアプローチが組み合わされます。

  3. TCP 接続は二重です。同時に送受信できます。ただし、HTTP プロトコルは単純な要求応答モデルに基づいています。つまり、常に 1 つの当事者だけが「話している」のです。
于 2013-10-07T17:13:04.230 に答える