# CloudPan
##version 1.0
####系统架构图
![](https://github.com/qinyuLT/Images/blob/master/cloudpan.png)</br>
###负载均衡服务器的作用:
- 1.接收Cli端客户请求消息Request Msg,并作相应处理,回传Respone Msg;
- 2.负载均衡服务器负责客户的登录、注册功能;
- 3.负载均衡服务器管理后端的功能处理服务器(FileTransServer、ChartServer),选择合适服务器处理业务
###FileTransServer:
- 负责文件处理相关的操作
###ChartServer
- 负责聊天相关的操作
##version 2.0
相对version1.0版本的改进是:使用[G6](http://www.oschina.net/p/G6)开源负载均衡器,并加入相应的进程池、连接池;</br>
该项目是在linux下采用C/C++编程,基于TCP协议,服务器端采用多进程长连接的socket的通信方式,并采用开源的负载均衡器G6作为客户端请求与服务端响应的中间件分发器,[G6](http://www.oschina.net/p/G6)是该开发者在[G5](http://www.oschina.net/p/g5)的基础上的升级版,相比G5多了心跳报告和命令管理的功能,所以对于服务器的状态就不需要关心了,包括服务器的组装,只需要修改G6的配置文件。考虑到服务器端如果每接收到一个请求fork一个进程处理方式的效率低,所以服务器端采用进程池方式,结合[libevent](http://libevent.org/)网络库,可以处理并发的TCP连接请求,同时对数据库的访问会带来同样的问题,所以实现了一个基于[mysqlclient](https://pypi.python.org/pypi/mysqlclient)接口的连接池。
###一共使用三个端口:[详情 public.h](https://github.com/qinyuLT/CloudPan/blob/master/CloudPan1.0/public.h)
```c++
#define CPT 6666 //管理端口
#define TPT 6667 //传输端口
#define MPT 6668 //聊天端口
```
###数据的处理
[memcached](http://php.net/manual/zh/book.memcached.php)的采用是为了减轻对mysql数据库的访问,比如在用户注册的时候,需要插入mysql中并在memcached中基于key-value的键值对用户名和密码进行存储,这样对于用户之后的登录只需要在memcached中查询,而不需要访问数据库,因memcached是基于内存的缓存系统,所以在这样查询效率就会很高,但是不好的一点就是如果系统宕机或者重启,数据就没有了;对于这种情况我的处理方式是,定期将memcached中的数据写入硬盘文件,每次重启导入该文件,这里的定期采用的是libevent中统一事件源中的定时器事件。
memchache和mysql对于文件的存储,只存储文件在磁盘上的地址。对于用户密码的安全性已经文件的一致性,采用了MD5算法,客户端发送的密码是经过MD5算法生成的32位随机字符串,对于文件,这32位字符串可以唯一标识,用它可以实现秒传功能,即便是相同内容的不同文件名也可以分辨出来。
断点续传功能的实现跟大文件的传输有关,对小文件一次传输不作记录;对于大文件的传输采用两个结构体:分别传输文件头部信息和文件数据内容
```c++
//文件头部信息
struct fileinfo
{
string file_name; //文件名
string file_MD5; //文件MD5值
string file_path; //文件存储路径
int file_size; //文件大小
int file_chunk_size; //分块个数
int chunk_size; //分块标准
bool trans_status; //传输状态
};
//文件内容
struct filedata
{
string file_name; //文件名
int id; //分块id
int offset; //该块在文件的偏移量
bool trans_status; //传输状态
};
```
###linux下常用的文件传输方式:
- FTP: ftp 主机名 /ip 常用命令:ls,cd,get,put,open</br>
使用ftp脚本可以自动完成文件传输任务(堆积命令)</br>
不保留文件的属性(文档的保护模式或者修改次数),不能递归的拷贝子目录</br>
- rcp:
保留文件的属性(-p),可以递归的拷贝子目录(-r),提供DES加密传输(-x)</br>
- scp: secure copy
安全拷贝的缩写,使用ssh来传输数据,并使用与ssh相同的认证模式</br>
scp命令用法和rcp命令用法非常类似,但是scp更安全</br>
- wget: 支持HTTP、HTTPS、FTP协议,支持代理服务器以及断点续传功能</br>
可以实现递归下载</br>
- curl: 是对libcurl库的一个命令行工具包,功能很强大,80多个下载参数</br>
支持FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、TELNET等各种协议</br>
支持代理、用户认证、FTP传输、HTTP post、SSL连接、文件续传等</br>
- rsync:高效的远程数据备份和镜像工具、可以快速同步多台主机间的文件</br>
支持文件详细属性的拷贝(所有者、组信息、权限信息等)</br>
通过远程shell(ssh/rsh)进程传输</br>
流水线式文件传输模式,文件传输效率高</br>
rsync算法能在相当短的时间内计算出需要备份的数据</br>
只对源、目的文件的不同进行传输</br>
从而降低网络中传输的数据量,以此达到快速备份镜像的目的</br>
没有合适的资源?快使用搜索试试~ 我知道了~
C++ 云盘项目实战案例
共36个文件
h:12个
cpp:12个
makefile:3个
需积分: 5 0 下载量 37 浏览量
2023-12-01
16:08:43
上传
评论
收藏 101KB ZIP 举报
温馨提示
该项目是在linux下采用C/C++编程,基于TCP协议,服务器端采用多进程长连接的socket的通信方式,并采用开源的负载均衡器G6作为客户端请求与服务端响应的中间件分发器,G6是该开发者在G5的基础上的升级版,相比G5多了心跳报告和命令管理的功能,所以对于服务器的状态就不需要关心了,包括服务器的组装,只需要修改G6的配置文件。考虑到服务器端如果每接收到一个请求fork一个进程处理方式的效率低,所以服务器端采用进程池方式,结合libevent网络库,可以处理并发的TCP连接请求,同时对数据库的访问会带来同样的问题,所以实现了一个基于mysqlclient接口的连接池。 ###一共使用三个端口:详情 public.h #define CPT 6666 //管理端口 #define TPT 6667 //传输端口 #define MPT 6668 //聊天端口 ###数据的处理 memcached的采用是为了减轻对mysql数据库的访问,比如在用户注册的时候,需要插入mysql中并在memcached中基于key-value的键值对用户名和密码进行存储样对
资源推荐
资源详情
资源评论
收起资源包目录
CloudPan.zip (36个子文件)
CloudPan
CloudPan1.0
Makefile 677B
public.h 2KB
client
Makefile 679B
md5.h 1KB
conCli.h 771B
md5.cpp 9KB
cli 20KB
MCache.h 4KB
conCli.cpp 3KB
login.h 2KB
readme.md 4KB
test
mysql.cpp 2KB
xcp.c 5KB
server
tPool.cpp 5KB
sqlConnPool.cpp 4KB
conSer.h 942B
FTSLog.out 20B
fileTrans.cpp 8KB
Makefile 677B
md5.h 1KB
MyDB.cpp 3KB
FTS 51KB
conSer.cpp 9KB
main.cpp 1KB
fileTrans.h 871B
md5.cpp 9KB
chart.cpp 330B
ser 40KB
testser.cpp 1KB
sqlConnPool.h 1KB
serLog.out 505B
chart.h 345B
MyDB.h 682B
main 51KB
tPool.h 1KB
README.md 5KB
共 36 条
- 1
资源评论
SuperGloo
- 粉丝: 36
- 资源: 33
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功