Skip to content

white0dew/WebServer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5cedb03 · Apr 7, 2024

History

22 Commits
Oct 14, 2021
Apr 23, 2021
Oct 14, 2021
Mar 17, 2021
Mar 17, 2021
Oct 14, 2021
Mar 17, 2021
Oct 14, 2021
Oct 14, 2021
Mar 10, 2021
Mar 17, 2021
Apr 7, 2024
Apr 23, 2021
Mar 17, 2021
Mar 17, 2021
Mar 17, 2021
Oct 14, 2021
Mar 17, 2021
Oct 14, 2021
Oct 14, 2021

Repository files navigation

TinyWebServer

Linux下基于C++的轻量级Web服务器注释、修改版本. 原项目来自:https://github.com/qinguoyi/TinyWebServer

有什么特点?

  • 使用 线程池 + 非阻塞socket + epoll(ET和LT均实现) + 事件处理(Reactor和模拟Proactor均实现) 的并发模型
  • 使用状态机解析HTTP请求报文,支持解析GET和POST请求
  • 访问服务器数据库实现web端用户注册、登录功能,可以请求播放服务器图片和视频文件
  • 实现同步/异步日志系统,记录服务器运行状态
  • 经Webbench压力测试可以实现上万的并发连接数据交换

快速运行

  • 服务器测试环境

    • Ubuntu版本16.04
    • MySQL版本5.7.29
  • 浏览器测试环境

    • Windows、Linux均可
    • Chrome
    • FireFox
    • 其他浏览器暂无测试
  • 测试前确认已安装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
  • 浏览器端 打开指定网页

    127.0.0.1:9006

个性化运行

./server [-p port] [-l LOGWrite] [-m TRIGMode] [-o OPT_LINGER] [-s sql_num] [-t thread_num] [-c close_log] [-a actor_model]

温馨提示:以上参数不是非必须,不用全部使用,根据个人情况搭配选用即可.

  • -p,自定义端口号
    • 默认9006
  • -l,选择日志写入方式,默认同步写入
    • 0,同步写入
    • 1,异步写入
  • -m,listenfd和connfd的模式组合,默认使用LT + LT
    • 0,表示使用LT + LT
    • 1,表示使用LT + ET
    • 2,表示使用ET + LT
    • 3,表示使用ET + ET
  • -o,优雅关闭连接,默认不使用
    • 0,不使用
    • 1,使用
  • -s,数据库连接数量
    • 默认为8
  • -t,线程数量
    • 默认为8
  • -c,关闭日志,默认打开
    • 0,打开日志
    • 1,关闭日志
  • -a,选择反应堆模型,默认Proactor
    • 0,Proactor模型
    • 1,Reactor模型

测试示例命令与含义

./server -p 9007 -l 1 -m 0 -o 1 -s 10 -t 10 -c 1 -a 1
  • 端口9007
  • 异步写入日志
  • 使用LT + LT组合
  • 使用优雅关闭连接
  • 数据库连接池内有10条连接
  • 线程池内有10条线程
  • 关闭日志
  • Reactor反应堆模型

联系

你可以通过这个wechat联系我,我很乐意帮你解答问题: 二进制的耳语

致谢

Linux高性能服务器编程,游双著. 源码来自:https://github.com/qinguoyi/TinyWebServer

About

A TinyWebServer implemented inC++11.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published