Linux 下使用 C++ 实现的 Web 文件服务器
项目地址:
Github:https://github.com/shangguanyongshi/WebFileServer
在学习完成《TCP/IP 网络编程》和《Linux高性能服务器编程》后,阅读了一些Web服务器的相关代码,自动动手使用 C++11 实现了这个 Linux 下简单 Web 文件服务器,通过浏览器发送 HTTP 请求管理服务器指定文件夹下的所有文件。主要功能包括:
- 以 HTML 页面形式返回该文件夹下的所有文件
- 可以选择本地文件上传到服务器
- 可以对列表中的文件文件执行下载操作
- 可以删除服务器中的指定文件
HTML 的文件列表页面如下所示:
整体框架
- 使用 Reactor 事件处理模型,通过统一事件源,主线程使用 epoll 监听所有的事件,工作线程负责执行事件的逻辑处理
- 预先创建线程池,当有事件发生时,加入线程池的工作队列中,使用随机选择算法选择线程池中的一个线程处理工作队列的事件
- 使用 HTTP GET 方法获取文件列表,发起下载文件、删除文件的请求。使用 POST 方法向服务器上传文件
- 服务端使用有限状态机对请求消息进行解析,根据解析结果执行操作后,向客户端发送页面、发送文件或发送重定向报文
- 服务端使用
sendfile
函数实现零拷贝数据发送
功能展示
获取文件列表
上传文件
下载文件
删除文件
运行
- build 项目
sh ./build.sh
- 启动文件服务器
./main
- 在浏览器端输入
服务端ip:端口号
(端口号默认是8888)serverip:8888
拓展
由于时间匆忙,该项目仅仅完成了最基础的功能,但是该项目还有很多可以继续拓展的功能,这里简单列出,以后会继续完善:
现有程序中,运行日志直接输入到控制台,另设进程池实现日志服务(实现远程日志服务器)
增加用户注册登陆功能,根据登陆账户提供各自的文件服务
添加定时器定时处理非活动的连接
参考资料
- 《TCP/IP 网络编程》:https://book.douban.com/subject/25911735/
- 《Linux高性能服务器编程》:https://book.douban.com/subject/24722611/
- TinyWebServer:https://github.com/qinguoyi/TinyWebServer
Linux 下使用 C++ 实现的 Web 文件服务器相关推荐
- linux下tomcat部署java web项目_在linux下用tomcat部署java web项目的过程与注意事项
在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...
- linux查看gogs版本,linux下 gogs的安装和web钩子
linux系统下 gogs下载安装以及web钩子的使用 (1)下载gogs 官方网址:https://dl.gogs.io/ 选择合适的版本,解压后就可以使用了 启动gogs的命令: ./gos ...
- windows,linux下SVN实现自动更新WEB目录
http://www.bestphper.cn/article-132.html 通过SVN进行版本库管理,每次提交后,都要在SVN服务器更新最新上传的版本到WEB目录进行同步.操作比较烦琐,而且效率 ...
- 在linux下用tomcat部署java web项目的过程与注意事项(转)
一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载Java SE 6 Update 27 根据操 ...
- linux设置web服务器配置,Linux下配置功能完善的Web服务器
调试环境:Redhat9.0Apache1.3.29Mysql3.23.58PHP4.3.4 Linux系统的安装我就不讲了,这是基本功,其实这篇文章在类似Redhat的其他linux也应该通用,大家 ...
- Linux下HTTP Server
想在Linux下实现一个简单的web Server并不难.一个最简单的HTTP Server不过是一个高级的文件服务器,不断地接收客户端(浏览器)发送的HTTP请求,解析请求,处理请求,然后像客户端回 ...
- linux安装eclipse运行web,Linux安装Tomcat,运行Eclipse,web项目
到官网下载:https://tomcat.apache.org/download-80.cgi 在这里是8.5.39版本 下载tar,gz 提取解压后,我这里是放到opt目录下 cd 切换目录 / ...
- java version 和javac版本不一致_解决linux下javac -version和java -version版本显示不一致...
[javascript] view plaincopy [root@localhost usr]# $JAVA_HOME/bin/java -version bash: /bin/java: 没有那个 ...
- Linux 下后台运行程序,查看和关闭后台运行程序(转载)
1.运行.sh文件 直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令. (1)&命令 功能:加在一个命令的最后,可以把这 ...
最新文章
- 小忆《记录博客一周年》
- application.xml定时
- 阿里巴巴开源 Dragonwell JDK 最新版本 8.1.1-GA 发布
- 词法、语法与语义相关知识
- 另一种办法直接在宿主机上的文件夹内查看Docker镜像运行的日志文件
- 字符串 CSV解析 表格 逗号分隔值 通讯录 电话簿 MD
- 第五章 了解你的用户
- 使用 Ocelot 匹配路由的方法匹配路由
- 记一次ArrayList产生的线上OOM问题
- psv应用java_PSV内容管理功能详细说明
- 019-批量修改redis TTL和批量删除key
- miui主题编辑器和java jdk_MIUI主题编辑器手机版下载|MIUI主题编辑器安卓版下载 v1.0.8 - 跑跑车安卓网...
- js打印去除页眉页脚
- jdk12switch表达式
- 用算符优先法对算术表达式求值(六)
- 2022.8.17 mysql 课后作业
- mysql子查询:标量子查询,行子查询,列子查询
- 第三节:带你详解Java的操作符,控制流程以及数组
- 技术Leader的30个套路
- 完美解决Tomcat启动一闪而过
热门文章
- 用keil软件编写C语言排序程序
- sqlserver2008r2 服务自动停止_坏消息!亚马逊一项功能将于8月停止服务,卖家难以接受...
- 取消springboot中的Test类中的日志打印
- 大一Python之循环解决实际问题
- torch.nn.functional.normalize
- C语言 return没有返回值.
- ESP32CAM实现手机app实时监控
- python抓取微信群消息怎么屏蔽_在微信好友信息抓取这一块,这才是最好的python分析技巧!...
- HDU4903The only survival(clj计数问题ppt)
- python实现数据清洗(重复值+缺失值+异常值处理)