Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

最終プロジェクト:マルチスレッド Web サーバーの構築

長い旅路でしたが、ついに本書の終わりにたどり着きました。この 章では、最後の数章で扱った概念のいくつかを実演するとともに、 以前に学んだ内容も振り返るために、もう 1 つのプロジェクトを一緒に作ります。

最終プロジェクトでは、「Hello!」と表示し、Web ブラウザーで 図 21-1 のように見える Web サーバーを作ります。

Web サーバーを構築するための計画は次のとおりです。

  1. TCP と HTTP について少し学ぶ。
  2. ソケットで TCP 接続を待ち受ける。
  3. 少数の HTTP リクエストをパースする。
  4. 適切な HTTP レスポンスを作成する。
  5. スレッドプールでサーバーのスループットを改善する。
テキスト内容「Hello! Hi from Rust」を含む Web ページを表示している、アドレス 127.0.0.1:8080 にアクセスした Web ブラウザーのスクリーンショット

図 21-1:最後に一緒に取り組むプロジェクト

始める前に、2 つの点に触れておくべきでしょう。まず、これから使う方法は、 Rust で Web サーバーを構築する最良の方法ではありません。コミュニティの メンバーは、私たちがこれから作るものよりも、より完全な Web サーバーや スレッドプールの実装を提供する、本番運用可能なクレートを crates.io で多数公開しています。しかし、この章の目的は、 楽をすることではなく、みなさんの学習を助けることにあります。Rust は システムプログラミング言語なので、扱いたい抽象化のレベルを選べますし、 他の言語では不可能または現実的でないほど低いレベルまで踏み込むこともできます。

次に、ここでは async と await は使いません。非同期ランタイムの構築まで 加えてしまうと、スレッドプールの構築だけでも十分に大きな挑戦だからです! ただし、この章で目にするいくつかの同じ問題に対して、async と await が どのように適用できるかについては触れます。最終的には、第 17 章で述べた とおり、多くの非同期ランタイムは作業を管理するためにスレッドプールを 使っています。

したがって、将来使うかもしれないクレートの背後にある一般的な考え方や テクニックを学べるように、基本的な HTTP サーバーとスレッドプールを手作業で 実装していきます。