コンテンツにスキップ

最終更新:2026-10-12

C++20 コルーチン HTTP サーバ

モダン C++ HTTP サーバ

最近、星球の仲間からネットワーク関連のプロジェクトはないかとよく聞かれるので、モダン C++ + CMake 管理による完全なプロジェクトを書きました。

このプロジェクトには次のような特徴があります:

  • モダン C++ の機能をふんだんに使用
  • C++20 関連
    • cortouine
    • concept
    • std::format
    • std::span
  • C++17 関連
    • if 文の初期化
    • 構造化束縛
    • optional
  • 高効率なイベント駆動機構
  • epoll によるイベントループを実装し、大量のクライアント接続を管理します。epoll は Linux プラットフォームで高並行 I/O を扱う効率的なツールであり、複数のファイル記述子のイベントを同時に監視できるため、システムコールのオーバーヘッドを効果的に削減し、I/O 操作の並行性を高めます。
  • サーバはメインのイベントループで非ブロッキング epoll_wait により接続イベントを監視し、従来のブロッキング I/O による性能ボトルネックを回避しています。
  • コルーチンと非同期プログラミング
  • C++20 コルーチンを採用して非同期タスクの実装を簡素化し、同期コードと似た書き味を提供することで、コードロジックをより明快にしています。プロジェクトでは co_await でクライアントデータの読み書きを非同期に行い、スレッドのコンテキストスイッチのオーバーヘッドを削減しています。
  • SocketAwaiter と AsyncSocketOperation の 2 つのクラスを実装し、ソケットの非同期読み書き操作をカプセル化して、非同期処理コードをより簡潔かつ自然に書けるようにしています。
  • ファイル I/O 操作の非同期処理
  • サーバは HTML ファイル内容の非同期読み込みをサポートし、std::async による非同期ファイル読み込みでメインスレッドのブロックを避け、クライアントのリクエストにより速く応答できるようにしています。
  • リクエスト処理時には、必要なファイルを非同期で読み込んでメモリにキャッシュし、I/O 操作が性能に与える影響を軽減しています。
  • 非ブロッキングソケット操作
  • fcntl でソケットを非ブロッキングモードに設定し、accept や read/write 操作がサーバのメインスレッドをブロックしないようにします。これは高並行のシナリオでは特に重要で、サーバの並行処理能力を大幅に向上させます。

プロジェクトの実行結果:

学習方法:詳細なドキュメント+コードが用意されており、単体で購入する場合は下の WeChat へ、または星球にご参加ください。

関連トピック

コメント