TinyWebServer
1.0.0
Linux下C++輕量級Web伺服器,協助初學者快速實踐網路編程,搭建屬於自己的伺服器.
很多童鞋通过本项目入门了,但是对于一些东西还是属于知其然不知其所以然的状态,需要加强下基础知识的学习
,推薦認真閱讀下概述 | 框架 | Demo演示 | 壓力測試 | 更新日誌 | 原始碼下載 | 快速運行 | 個性化運行 | 庖丁解牛 | CPP11實現 | 致謝 |
---|
- C/C++
- B/S模型
- 線程同步機制包裝類
- http連線請求處理類
- 半同步/半反應器線程池
- 定時器處理非活動連接
- 同步/非同步日誌系統
- 資料庫連線池
- 同步執行緒註冊和登入校驗
- 簡易伺服器壓力測試
- 註冊演示
- 登入示範
- 請求圖片檔案示範(6M)
- 請求視訊檔案演示(39M)
在關閉日誌後,使用Webbench對伺服器進行壓力測試,對listenfd和connfd分別採用ET和LT模式,均可實現上萬的並發連接,下面列出的是兩者組合後的測試結果.
- Proactor,LT + LT,93251 QPS
- Proactor,LT + ET,97459 QPS
- Proactor,ET + LT,80498 QPS
- Proactor,ET + ET,92167 QPS
- Reactor,LT + ET,69175 QPS
- 並發連接總數:10500
- 訪問伺服器時間:5s
- 所有訪問均成功
注意:使用本項目的webbench進行壓測時,若報錯顯示webbench指令找不到,將可執行檔webbench刪除後,重新編譯即可。
lock.h
中的封裝類,統一使用此同步機制目前有兩個版本,版本間的程式碼結構有較大改動,文件和程式碼運作方法也不一致。重構版本更簡潔,原始版本(raw_version)更大保留遊雙程式碼的原汁原味,從原始版本更容易入手.
如果遇到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 " ;
build
sh ./build.sh
啟動server
./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實作:Webserver
Linux高效能伺服器編程,遊雙著.
感謝以下朋友的PR和幫助: @RownH,@mapleFU,@ZWiley,@zjuHong,@mamil,@byfate,@MaJun827,@BBLiu-coder,@smoky96,@yfBong,@liuwuyao,@Huixxi,@markparticle,@ blogg9ggg.