# Tiny-httpd **Repository Path**: third_party_project_code/Tiny-httpd ## Basic Information - **Project Name**: Tiny-httpd - **Description**: Tinyhttpd 是一个支持多端口监听的 HTTP 服务器,基于 QT QTcpServer 封装 - **Primary Language**: C/C++ - **License**: MIT - **Default Branch**: master - **Homepage**: https://www.oschina.net/p/tiny-httpd - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2021-06-01 - **Last Updated**: 2021-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ##Tinyhttpd A tiny http server with multi-port monitoring. ##目录结构 ``` [src] ├── LICENSE #MIT许可证 ├── README.md #使用说明 ├── tinyhttpd.pro #工程文件 #主程序 ├── main.cpp #启动多端口监听 ├── serverthread.cpp #QThread子类线程,设置IP,port及启动Server ├── server.cpp #QTcpServer子类,多线程,每个线程对应一个port监听 ├── request.cpp #接受client请求,多线程,每个线程对应一个请求 ├── response.cpp #构造返回Request Headers ├── responsefile.cpp #返回网页 ├── responsedictionary.cpp#列举url对应目录 ├── mime.cpp #设定扩展应用 ├── common.cpp #获取当前时间 ├── log.cpp #日志系统 ├── database.cpp #Redis数据库 ├── monitorui.cpp #UI界面 ├── starter.cpp #UI界面控制逻辑 ├── ips.cpp #UI子界面控制逻辑 #配置 ├── httpstatus.h #状态码 ├── tinyhttpd.ini #服务器配置文件 ├── tinyhttpd.log #服务器日志 ├── mime.txt #mime配置 ├── monitorui.ui #UI界面配置 ├── ip.ui #UI子界面配置 [www] #网站根目录 ├──static ├──index.html [response] #网页返回状态网页 ├── 301.html #301 Permanently Moved ├── 304.html #304 Not Modified ├── 403.html #403 Forbidden └── 404.html #404 Not Found [resource] ├── black.png #QT界面用到图片 ├── blue.png [assets] ├── database.png ├── monitor.png └── ip.png ``` ##Todo * 加入Redis数据库支持,存储访问数据 * 加入QT界面,显示服务器配置参数 * 界面逻辑中加入开始和停止 * 加入QT子界面,实现界面转换。显示实时连接情况 * 尝试其它的进程模型:单线程或多线程 ##运行环境 + Linux/Mac OS X + QT4/QT5 + Redis/Hiredis ##使用 - 安装Redis及Hiredis ``` git clone https://github.com/antirez/hiredis.git && cd hiredis make sudo make install sudo ldconfig ``` - 打开配置文件tinyhttpd.ini配置服务器选项 ``` [httpd] port=1234|1235|1236 #配置服务器监听的多个端口,用|隔开 ipv6=true #配置ipv6支持 logfile=tinyhttpd.log show_log=true [site] root_path=/home/huangyi/Practice/QT/tinyhttpd/www #网站根目录 dir_listing=true #是否允许获取文件树,否则返回403 forbidden #index="index.html", "index.htm" #配置后,直接跳到网页index.html,不列出文件树 [request] buffer_size=1048576 #为网页文件分配的内存空间 keep_alive_enable=true #是否打开长连接 keep_alive_default=true keep_alive_timeout=30 #长连接timeout keep_alive_timeout_max=300 ``` - 修改Redis配置文件`/etc/redis.conf` ``` daemonize yes ``` 使Redis服务器运行在daemon模式 ``` redis-server /etc/redis.conf ``` ##界面 QT运行界面 ![image](/assets/monitor.png) QT显示来访数据 ![image](/assets/ip.png) Redis存储数据 ![image](/assets/database.png) ##原理 封装层次 ``` Tinyhttpd | QTcpServer | QTcpSocket ``` 多线程模型 ``` fork ┌──Request A ┌──Server(Port)—————├──Request B | └──Request C fork | ServerThread—————├──Server(Port)... | | └──Server(Port)... ``` ##说明 本repo参考 + https://github.com/BYVoid/byvhttpd + https://github.com/awwit/httpserver 在项目基础上进行更改,感谢项目作者。 具体细节参见博客[HTTP服务器实现](http://fuzhii.com/2015/05/09/httpserver)。