项目地址:

Github:https://github.com/shangguanyongshi/WebFileServer

在学习完成《TCP/IP 网络编程》和《Linux高性能服务器编程》后,阅读了一些Web服务器的相关代码,自动动手使用 C++11 实现了这个 Linux 下简单 Web 文件服务器,通过浏览器发送 HTTP 请求管理服务器指定文件夹下的所有文件。主要功能包括:

  • 以 HTML 页面形式返回该文件夹下的所有文件
  • 可以选择本地文件上传到服务器
  • 可以对列表中的文件文件执行下载操作
  • 可以删除服务器中的指定文件

HTML 的文件列表页面如下所示:

整体框架

  • 使用 Reactor 事件处理模型,通过统一事件源,主线程使用 epoll 监听所有的事件,工作线程负责执行事件的逻辑处理
  • 预先创建线程池,当有事件发生时,加入线程池的工作队列中,使用随机选择算法选择线程池中的一个线程处理工作队列的事件
  • 使用 HTTP GET 方法获取文件列表,发起下载文件、删除文件的请求。使用 POST 方法向服务器上传文件
  • 服务端使用有限状态机对请求消息进行解析,根据解析结果执行操作后,向客户端发送页面、发送文件或发送重定向报文
  • 服务端使用 sendfile 函数实现零拷贝数据发送

功能展示

获取文件列表

上传文件

下载文件

删除文件

运行

  1. build 项目

    sh ./build.sh
    
  2. 启动文件服务器
    ./main
    
  3. 在浏览器端输入 服务端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 文件服务器相关推荐

  1. linux下tomcat部署java web项目_在linux下用tomcat部署java web项目的过程与注意事项

    在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...

  2. linux查看gogs版本,linux下 gogs的安装和web钩子

    linux系统下 gogs下载安装以及web钩子的使用 (1)下载gogs  官方网址:https://dl.gogs.io/ 选择合适的版本,解压后就可以使用了 启动gogs的命令:  ./gos ...

  3. windows,linux下SVN实现自动更新WEB目录

    http://www.bestphper.cn/article-132.html 通过SVN进行版本库管理,每次提交后,都要在SVN服务器更新最新上传的版本到WEB目录进行同步.操作比较烦琐,而且效率 ...

  4. 在linux下用tomcat部署java web项目的过程与注意事项(转)

    一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载Java SE 6 Update 27 根据操 ...

  5. linux设置web服务器配置,Linux下配置功能完善的Web服务器

    调试环境:Redhat9.0Apache1.3.29Mysql3.23.58PHP4.3.4 Linux系统的安装我就不讲了,这是基本功,其实这篇文章在类似Redhat的其他linux也应该通用,大家 ...

  6. Linux下HTTP Server

    想在Linux下实现一个简单的web Server并不难.一个最简单的HTTP Server不过是一个高级的文件服务器,不断地接收客户端(浏览器)发送的HTTP请求,解析请求,处理请求,然后像客户端回 ...

  7. linux安装eclipse运行web,Linux安装Tomcat,运行Eclipse,web项目

    到官网下载:https://tomcat.apache.org/download-80.cgi  在这里是8.5.39版本 下载tar,gz 提取解压后,我这里是放到opt目录下 cd  切换目录 / ...

  8. java version 和javac版本不一致_解决linux下javac -version和java -version版本显示不一致...

    [javascript] view plaincopy [root@localhost usr]# $JAVA_HOME/bin/java -version bash: /bin/java: 没有那个 ...

  9. Linux 下后台运行程序,查看和关闭后台运行程序(转载)

    1.运行.sh文件 直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令. (1)&命令 功能:加在一个命令的最后,可以把这 ...

最新文章

  1. 小忆《记录博客一周年》
  2. application.xml定时
  3. 阿里巴巴开源 Dragonwell JDK 最新版本 8.1.1-GA 发布
  4. 词法、语法与语义相关知识
  5. 另一种办法直接在宿主机上的文件夹内查看Docker镜像运行的日志文件
  6. 字符串 CSV解析 表格 逗号分隔值 通讯录 电话簿 MD
  7. 第五章 了解你的用户
  8. 使用 Ocelot 匹配路由的方法匹配路由
  9. 记一次ArrayList产生的线上OOM问题
  10. psv应用java_PSV内容管理功能详细说明
  11. 019-批量修改redis TTL和批量删除key
  12. miui主题编辑器和java jdk_MIUI主题编辑器手机版下载|MIUI主题编辑器安卓版下载 v1.0.8 - 跑跑车安卓网...
  13. js打印去除页眉页脚
  14. jdk12switch表达式
  15. 用算符优先法对算术表达式求值(六)
  16. 2022.8.17 mysql 课后作业
  17. mysql子查询:标量子查询,行子查询,列子查询
  18. 第三节:带你详解Java的操作符,控制流程以及数组
  19. 技术Leader的30个套路
  20. 完美解决Tomcat启动一闪而过

热门文章

  1. 用keil软件编写C语言排序程序
  2. sqlserver2008r2 服务自动停止_坏消息!亚马逊一项功能将于8月停止服务,卖家难以接受...
  3. 取消springboot中的Test类中的日志打印
  4. 大一Python之循环解决实际问题
  5. torch.nn.functional.normalize
  6. C语言 return没有返回值.
  7. ESP32CAM实现手机app实时监控
  8. python抓取微信群消息怎么屏蔽_在微信好友信息抓取这一块,这才是最好的python分析技巧!...
  9. HDU4903The only survival(clj计数问题ppt)
  10. python实现数据清洗(重复值+缺失值+异常值处理)