C ++ 11に基づくHTTPサーバーの実装は、CGIインスタンスを簡単に追加することができます。静的なリソースを処理したり、HTTPの長い接続をサポートしたりできます。また、非同期ログを実装して、サーバーのステータスを記録します。
テストページ:Examplecgi、Logincgi、uploadcgi
a)ソースファイルをバイナリ実行可能ファイルにコンパイルする(ルートフォルダー)
bash install.shb)プログラムを実行します(ビルドフォルダーで)
cd build
./httpcgiservermaina)examplecgiのようなBasecgiクラスを継承するCGIインスタンスクラスを作成します。
b)CGIインスタンスをCGIInstanceFactoryに追加します。
c)ヘッダーファイルをCGIHeaderに追加します。
d)cmakelists.txtを変更します。
e)その後、構築して実行します。
Webbenchによるテスト結果はこちらに示されています。
実装の概要については、Impldoc.mdを参照してください。ヘッダーファイルのガイド:
非同期ログからのログシステムのベース/log.hインターフェイス。
epoller.h epollの関連する関数をカプセル化します。
netutil.hソケットFDの関連関数をカプセル化します。
SimpleBuffer.hアプリケーションレイヤーバッファー(LTモデルのみを実装しています)。
Channel.hは、チャネル(イベント)関連のコールバック関数(読み取り/書き込み/エラー関数)をカプセル化します。
minheap.hは、minヒープを使用して、有効期限が切れた時間を管理します。
eventloop.hは、エポラーに登録されているチャネル(イベント)を管理し、アクティブチャネル(イベント)を処理します。
eventloopthread.h接続キューを管理し、メインのアセプションスレッドが接続ソケットFDをキューに押し込み、このスレッドはソケットFDをイベントループに追加します。
eventloopthreadpool.hいくつかのスレッドを管理します。メインのアセプションスレッドプッシュ接続ソケットFDはスレッドプールになり、ソケットをスレッドに発送します。
tcpserver.hは接続ソケットFDを受け入れ、接続ソケットで読み取りイベントが登場すると、バイトストリームをチャネルのアプリケーションバッファーに自動的に読み取り、読み取りコールバック関数を実行します。書き込みとエラーのイベントが起こったのと同じです。
httpmessage.h http要求を解析し、HTTP応答メッセージを作成します。ここでは、ステートマシンを使用してHTTPリクエストを処理します。
basecgi.h CGIインスタンスクラスの抽象クラス。プロセスインターフェイスを提供し、CGIリクエストを処理するために使用します。
includecgiheader.hは、cgidispatchに使用されるCGIインスタンスクラスを含みます。
CGIDISPATCH.H URLを使用してCGIインスタンスを見つけるCGIディスパッチャーは、CGIプログラムを実行します。
httpcgiserver.h読み取りイベントが起こると、まずチャンネルのアプリケーションバッファーでHTTP要求を解析し、次にCGIインスタンスを見つけてリクエストを処理します。
httpcgiservermain.cpp http server main。
examplecgi/examplecgi.hおよびlogincgi/logincgi.h CGIインスタンスクラスの書き方の例。 webfile/loginには、logincgiクラスで必要な.html、.js、.cssファイルが含まれます。