点击空白处退出提示
Linux云盘项目
我要开发同款作品详情
一、基本架构(服务端Linux,客户端Qt)
(一)、服务端结构
1、Linux系统
2、Epoll IO复用模型:高效的Epoll边缘触发IO复用
3、线程池:采取主线程(处理连接,派发任务,与均衡器通信。不进行其它IO操作)+子线程(执行客户端任务,进行IO操作)模式,实现了线程池
4、数据库连接池(单例模式):采用MySql的Connector/C++ 数据库框架,并配合RAII机制,实现一个自动申请和释放的数据库连接池
5、OpenSSL(安全套接字传输):使用Openssl框架实现,客户端与服务端之间安全加密传输,保护传输安全
6、Openssl文件校验:才是Openssl,对文件进行SHA256计算,并利用计算结果作为文件名,实现妙传,和文件传输校验。
7、基于小根堆的定时器:采用小根堆作为底层数据结构,实现了一个定时器,将长期不活跃的连接释放,减少服务器负载
8、分级日记系统(单例模式):使用多线程对日记进行写入。日记级别分为:Debug、info、warn、error。可根据情况不同写入不同日记,并自动记录时间。
9、任务处理(工厂模式):长(上传、下载等)短(登陆注册等)任务分离。使用多态实现客户端连接。一个抽象任务类下面继承实现多个具体任务类,根据客户端任务请求,生成不同对象,进行处理。长任务采取状态机处理:Check->Doing->Fin->Close.四种状态间转换处理。
10、负载均衡:实现一个简单负载均衡服务器。用来根据各服务器的当前负载量,派发客户端连接。该均衡器较为简单,仅供参考,不建议使用。现在云服务提供商基本都提供安全的均衡策略。
11、公平调度(轮询算法):并不会一个线程把全部任务处理完成,而是只处理该任务的一部分,然后在处理下个任务,使用轮询机制,避免大任务长期占用线程,导致其它任务无法得到处理,例如一个客户上传100G的文件,客户端的网速又不好,如果一个线程完全处理,会导致其它任务长期难以响应。 Image text
(二)客户端结构
1、Window系统(使用Qt跨平台框架,也可简单部署到其它系统)
2、Openssl安全加密传输
3、Asio库作为通信基础
4、短任务线程池。长任务多线程传输,避免UI界面冻结。
5、实现文件系统视图,可以进行层级化查看文件
6、界面与逻辑分离
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论