0

タスクがあります-以下のプロパティを持つクライアントサーバーアプリが必要です:

  • クライアントはブロッキング ソケットを使用します
  • サーバーは受動的です: 彼は着信接続を受け入れ、データを取得し、それを処理して結果を返します
  • サーバーには、1 から約 100 までの複数のスレッド (メインを除く) があります。
  • すべてのアクションは 1 台のマシン上で行われます。つまり、クライアントとサーバーの両方が localhost を使用します。
  • 転送されるデータの最大サイズは約1 KBです

最初に、epoll ベースのサーバーを実装しました。

  • メイン スレッドは epoll を使用して IO を実行し、ワーカー スレッドはデータ処理を実行します
  • すべてのサーバーソケットはノンブロッキングです
  • サーバーには 2 つのキューがあります。メイン スレッドがクライアント要求を送信する場所である受信と、メイン スレッドが応答を取得する場所からの送信です。

私は動作しますが、その設計についてもう一度考えました: localhost を考慮していません。それはより普遍的であるため、より複雑です。もっとシンプルにすればよかった。

そう:

  • メイン スレッドは epoll_wait を実行し、接続キューを受け入れて管理します。接続キューは、メインスレッドが受け入れられた接続を入れるキューです
  • リスニング ソケットはノンブロッキングです。受け入れられたソケットがブロックされています
  • いずれかのソケットが読み取り可能になると、メイン スレッドがワーカー スレッドを起動し、ワーカーはブロッキング モードで recv を実行し、ブロッキング モードで処理および送信を行います。

あなたはそれについてどう思いますか?あのデザインでいいの?

コメントしてくれてありがとう!

4

0 に答える 0