linux系统web服务器搭建(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创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!