项目简介
- 项目架构
该项目基于Linux,C/C++。
- 项目描述
该项目是⼀个能在虚拟目录下执⾏传输⽂件,下载⽂件,创建⽂件夹等操作的⽂件共享系统,实现功能与百度网盘类似。服务器采用创建线程池并结合epoll监听的⽅式处理客户端的命令,客户端可实现传输或下载文件的功能。整个⽂件系统采用虚拟目录设计,使用mysql存储文件信息,用户账号。本人作为后台研发组成员,主要完成了上传下载,密码验证,断点续传,mmap内存映射,keepalive心跳包功能。
项目详细描述
该项目是一个功能匹配百度网盘的私有云盘项目。用户可以自由的传输或下载自己想要的文件。
整个文件系统采用虚拟目录设计,虚拟目录意味着所有用户的所有文件实际上都存放在同一个文件中,各个用户只能够看到自己的文件,不能够看到别人的文件,通过mysql数据库记录文件的名称,路径,拥有者,以及MD5值,文件的实际存储是通过MD5值而不是文件名存储。这样可以大大的减小了空间的消耗,避免了文件的重复,不过在设计上提高了难度。
本人实现的功能如下啊:
- 普通命令
类似于linux中的 ls, cd , pwd, mkdir, rmdir ,puts(上传文件),gets(下载文件)等命令的实现。
- 密码验证
采用与linux密码验证相同的方法,即将输入的密码进行编码加密后再与 /etc/shadow 中的密码进行比较。相同则登录成功,反之失败。
- 文件断点续传
如果某一个文件传输或者下载到一半中途断开,重新下载的时候可以直接冲断开的地方下载。
- mmap大文件映射
当文件大于100M时直接采用内存映射的方式,避免了CPU读取磁盘花费的时间。
- 客户端长时间无反应时断开连接
该操作类似于keepalive心跳包的设置。