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)&命令 功能:加在一个命令的最后,可以把这 ...
最新文章
- [NOI2005]聪聪与可可(期望dp)
- Go基础编程:延迟调用defer
- 创建一个简单的存储过程(RroGetA_Z),要求输出A到Z之间的26个大写字母
- 毕业后想拿大厂 Offer?你得完整拥有这些计算机知识体系!
- 【WPF】鼠标拖拽功能DragOver和Drop
- 1.3 安装Oracle遇到的问题-yum更新配置
- MongoDB 固定集合详解
- Vue.js对数组对象的序号字段初始化重新生成序号
- loadrunner11中文版破解文档+录制脚本(图/文)
- 不义联盟2显示服务器,打开不义联盟2提示网络异常或者连接不上
- 学计算机语言从何开始,小孩学编程从哪开始
- 魅蓝note2手机计算机打开教程,魅族 魅蓝note2 开启USB调试模式
- 800名科学家联名反对统计学意义,放弃P值“决定论”!
- 数字油田中的虚拟光纤
- Windows命令:Net使用详解
- 网关系统就该这么设计(万能通用),稳的一批!
- 【ML】英雄联盟对局胜负预测任务
- 《机器学习方法(第三版)—— 李航》学习笔记(一)附代码
- 在 ubuntu20.04下搭建 lamp 环境并制作静态网页
- 通过python分析微信好友数据
热门文章
- uniapp上传图片和视频到OSS
- python毕业设计作品基于django框架 教室图书馆座位预约系统毕设成品(4)开题报告
- cs224n Assignment 1:exploring_word_vectors
- 基于最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇系统性实践技能提升
- 中宏涌晟适合工薪族的五种个人投资理财方式
- 九思OA的十大技术特色
- vue轻松实现虚拟滚动
- Notion AI vs ChatGPT vs New Bing 三款AI软件使用体验对比
- vue点击事件不生效
- php如何删除非空目录,php怎样删除非空目录_后端开发