Linux 上の C++ 軽量 Web サーバーは、初心者がネットワーク プログラミングをすぐに練習し、独自のサーバーを構築するのに役立ちます。
很多童鞋通过本项目入门了,但是对于一些东西还是属于知其然不知其所以然的状态,需要加强下基础知识的学习
ことがわかりました。 。概要 | フレーム | デモ | ストレステスト | 変更ログ | ソースコードのダウンロード | 早く走ってください | パーソナライズされた操作 | クック・ディン・ジェ・ニウ | CPP11の実装 | 謝辞 |
---|
- C/C++
- B/Sモデル
- スレッド同期機構ラッパークラス
- http接続リクエスト処理クラス
- 準同期/セミリアクター スレッド プール
- 非アクティブな接続を処理するタイマー
- 同期/非同期ロギングシステム
- データベース接続プール
- 同期スレッドの登録とログイン検証
- 簡易サーバーストレステスト
- デモにサインアップする
- ログインデモ
- 画像ファイルのデモをリクエストする (6M)
- ビデオ ファイルのデモをリクエストする (39M)
ログを閉じた後、Webbench を使用してサーバー上でストレス テストを実行します。listenfd と connfd にそれぞれ ET モードと LT モードを使用すると、両方とも数万の同時接続を実現できます。
- プロアクター、LT + LT、93251 QPS
- プロアクター、LT + ET、97459 QPS
- プロアクター、ET + LT、80498 QPS
- プロアクター、ET + ET、92167 QPS
- リアクトル、LT + ET、69175 QPS
- 同時接続の合計数: 10500
- サーバーへのアクセス時間: 5秒
- すべてのアクセスが成功しました
注:このプロジェクトの Webbench をストレス テストに使用するときに、webbench コマンドが見つからないというエラー メッセージが表示された場合は、実行可能ファイル webbench を削除して再コンパイルします。
lock.h
のカプセル化クラスを改善し、同期メカニズムを均一に使用します。 現在 2 つのバージョンがあり、バージョン間でコード構造に大きな変更があり、ドキュメントとコードの実行方法にも一貫性がありません。リファクタリングされたバージョンはより簡潔で、元のバージョン (raw_version) は大きく、Youshuang コードの元の風味が保たれており、元のバージョンから始めるのが簡単です。
Github コードのダウンロードに失敗した場合、またはアクセスが遅すぎる場合は、次のリンクからコードをダウンロードして、最新の Github 送信と同期できます。
サーバーテスト環境
ブラウザのテスト環境
テスト前に MySQL データベースがインストールされていることを確認してください
// 建立yourdb库
create database yourdb;
// 创建user表
USE yourdb;
CREATE TABLE user (
username char ( 50 ) NULL,
passwd char( 50 ) NULL
)ENGINE=InnoDB;
// 添加数据
INSERT INTO user (username, passwd) VALUES( ' name ' , ' passwd ' );
main.cppのデータベース初期化情報を変更します。
//数据库登录名,密码,库名
string user = " root " ;
string passwd = " root " ;
string databasename = " yourdb " ;
建てる
sh ./build.sh
サーバーを起動する
./server
ブラウザ側
ip: 9006
./server [-p port] [-l LOGWrite] [-m TRIGMode] [-o OPT_LINGER] [-s sql_num] [-t thread_num] [-c close_log] [-a actor_model]
注意: 上記のパラメータは必須ではありません。すべてを使用する必要はありません。個人の状況に応じて選択できます。
テストコマンドの例と意味
./server -p 9007 -l 1 -m 0 -o 1 -s 10 -t 10 -c 1 -a 1
最新バージョンの反復は高速であり、以下のコンテンツは主に古いバージョン (raw_version) のコードに基づいて詳細に説明しています。
よりシンプルで洗練された CPP11 実装: Web サーバー
Linux 高性能サーバー プログラミング (You Shuang 著)。
PR と協力してくれた次の友人に感謝します: @RownH、@mapleFU、@ZWiley、@zjuHong、@mamil、@byfate、@MaJun827、@BBLiu-coder、@smoky96、@yfBong、@liuwuyao、@Huixxi、@markparticle , @blogg9ggg。