Skip to content

andrewtyw/MiniDrive

Repository files navigation

MiniDrive

A web-based linux file server.

Features

  • 一个完全用C++实现的, 用于管理linux文件的Web服务。运行程序后, 用户登录成功用户即可看到其linux服务器某个文件夹下的所有文件; 用户可以删除/下载/上传文件;

System design

  • 使用线程池来调用线程处理工作队列中的事件, 比如连接事件, 信号事件, 读写事件。
  • 使用epoll系列系统调用来实现Reactor模式的IO复用
  • 使用有限状态机来解析http request, 构建http response和写入http response
  • 使用管道进行系统信号 (e.g., SIGALRM) 的传递
  • 基于升序链表, 设计了一个单例的定时器来实现了一个初级的http session
  • 使用sessionCookie做验证, 从而用户的每次文件操作(e.g., 删除/下载文件) 一定程度上保证了web后端接口的安全性
  • 实现了一个半异步日志系统, 写线程队列中取出内容,写入日志本地

Set-up

  • 推荐环境: Ubuntu 20.04, c++14, cmake: 3.24+
git clone git@github.com:Andrew-wong-ty/MiniDrive.git
cd MiniDrive/
mkdir build
cd build
cmake ..
make

# 运行主程序, 输入http:<你的外网ip>:8888/ 即可访问
# username=admin, password=123456
./main  

In progress

  1. 日志系统
  2. 编码windows/Linux客户端来同步本地文件到远程Linux服务器

Showcase

Ref. & Acknowledgement