1 Star 1 Fork 0

王宇松 / webserver

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

介绍

  • 基于C++编写的服务器,支持解析get请求,处理静态资源;

  • 使用非阻塞的EPOLL边沿触发(ET模式)实现IO多路复用;

  • 使用线程池提高并发度,降低频繁创建、销毁线程的开销;

  • 使用有限状态机解析http请求;

  • 支持日志系统,记录服务器运行情况及资源访问情况;

  • usage: ./WebServer port

  • 默认网站根目录(src/http_conn.cpp: line-37):/var/www

开发环境

操作系统:Ubuntu 20.04.2 LTS

编译器:g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

自动化构建:cmake (version 3.16.3)

编译 & 运行

cd build
cmake ..
make

./WebServer 8989

文件结构

.
├── build                       #构建目录
│   └── readme.md               #编译命令说明
├── CMakeLists.txt              #cmake
├── include                     #头文件目录   
│   ├── http_conn.h             #http逻辑处理 头文件
│   ├── http_content_type.h     #记录http content-type文件类型
│   ├── locker.h                #封装线程同步机制
│   ├── log.h                   #日志系统 头文件
│   ├── threadpool.h            #线程池
│   └── timer.h                 #定时器 时间堆(小顶堆) 头文件
├── LICENSE
├── README.md                   #项目说明文档
└── src                         #源文件目录
    ├── http_conn.cpp           #http逻辑处理
    ├── log.cpp                 #日志系统
    ├── main.cpp                #主函数
    └── timer.cpp               #时间堆(小顶堆)

3 directories, 14 files

运行截图 & 详细介绍 & 开发计划

点击访问 -->【基于EPOLL边沿触发(ET模式)和线程池的Web服务器 - 独人欣赏】

版本历史

  • 2021-08-18 --- v0.5.0
    • 新增:定时器模块,定时发出信号,由独立的线程调用相应的回调函数;
    • 优化:降低LOG::get_time()函数的执行频率,由定时器控制每60秒执行一次;
    • 优化:去除独立的日志线程,改由定时器定时将日志数据写入文件;
    • 优化:大幅降低使用write系统调用的次数,提升运行效率;
    • 优化:代码及部分注释清理、优化;
  • 2021-08-15 --- v0.3.5
    • 优化:自动获取服务器ip地址,无需在运行时手动输入;
  • 2021-08-14 --- v0.3.3
    • 新增:守护进程,服务器启动后将脱离终端,在后台运行;
    • 优化:日志模块,写文件之前判断日志文件是否存在,若不存在则重新创建;
    • 优化:日志模块,添加日志记录时间、优化日志记录格式;
  • 2021-08-13 --- v0.3.0
    • 新增:日志系统,记录服务器运行情况及资源访问情况;
    • 新增:ip地址及端口号合法性校验;
  • 2021-08-12 --- v0.2.0
    • 新增:支持访问文件名为中文的文件;
    • 新增:添加更多响应头部字段 -> Content-Type(默认text/plain)、Date(GMT);
    • 修复:修复文件内容为中文时的乱码问题(未指定字符集);
    • 优化:代码清理;
  • 2021-08-11 --- v0.1.0
    • 初始版本:《Linux高性能服务器编程》示例代码
MIT License Copyright (c) 2021 王宇松 admin@wangyusong.cn Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

基于EPOLL边沿触发(ET模式)和线程池的Web服务器 展开 收起
C++ 等 2 种语言
MIT
取消

发行版 (3)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/drxs/webserver.git
git@gitee.com:drxs/webserver.git
drxs
webserver
webserver
master

搜索帮助