在学习云盘项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
12-云盘项目- 01天 FastDFS
目录:
一、课程安排
二、项目
1、项目整体架构
2、web服务器
3、分布式文件系统
4、数据库和文件系统
5、fastDFS三个角色和它们之间的关系
6、fastDFS集群(了解)
7、fastDFS安装
8、追踪器配置文件修改
9、存储节点配置文件
10、客户端配置文件配置和fastDFS启动+测试
11、fastDFS文件的上传和下载流程
12、解决动态库找不到的问题
13、fastDFS上传操作源码分析
14、使用进程的方式实现文件的上传操作
15、log日志文件的使用
一、课程安排
第01天(FastDFS):
FastDFS概述
安装和配置
客户端编程
第02天(redis、redis和mysql的交互):
redis的安装和配置
redis的数据类型
redis客户端编程
redis和mysql的交互
第03天(Nginx、QListWidget和QJsonDocument的使用):
Nginx环境搭建和配置
Nginx反向代理
Nginx负载均衡
QListWidget的使用
QJsonDocument的使用
第04天(HTTP协议、FastCGI、QNetworkAccessManager的使用):
FastCGI介绍
FastCGI编程
Nginx中配置FastCGI模块
QNetworkAccessManager的使用
第05天(Qt整体界面搭建和基本功能实现)
第06-10天
内部功能局部实现
二、项目
1、项目整体架构
》系统架构图:
1)通过浏览器/桌面客户端访问服务器
○ C/S
○ B/S
2)反向代理服务器
○ 多台web服务器-集群
○ 给web服务器分配资源
3)高并发
○ 多台web服务器
4)nginx服务器+fastcgi
○ nginx处理静态请求
○ 动态需要使用FASTCGI处理
5)数据库
○ mysql
○ redis
6)分布式的文件系统- fastDFS
○ 上传和下载文件
2、web服务器
1)什么是服务器?
○ 硬件:一台配置比较高的电脑
○ 软件:在电脑上安装服务器软件
2)常见的web服务器
○ tomcat服务器
apache组织产品, 开源的免费服务器
○ weblogic服务器
bea公司, 收费的服务器
不交费, 访问量受限制
○ IIS服务器
Internet Information Server
微软公司主推的服务器
○ nginx
小巧且高效的HTTP服务器
也可以做一个高效的负载均衡反向代理
3、分布式文件系统
分布式文件系统
1)文件系统 - 存储数据
fat32, ntfs, ext3, ext4
2)分布式
○ 一般文件系统
○ 分布式的文件系统
文件系统的全部, 不在同一台主机上,在很多台主机上, 多个分散的文件系统组合在一起,形成了一个完整的文件系统。
分布式的文件系统基本结构:
4、数据库和文件系统
5、fastDFS三个角色和它们之间的关系
6、fastDFS集群(了解)
7、fastDFS安装
安装如下:
8、追踪器配置文件修改
修改配置文件:
在这一个终端,修改配置(vi tracker.conf),
打开另一个终端查看或创建文件
9、存储节点配置文件
修改配置(vi storage.conf):
还需要修改port(看是否被占用)、base_path(/home/robin/fastDFS/storage)、store_path_count及对应的store_path0(依次输入路径,如:只用了一个,为/home/robin/fastDFS/storage)、tracker_server(tracker服务器的IP+端口)
10、客户端配置文件配置和fastDFS启动+测试
修改配置(vi client.conf):
》fastDFS启动:
(1)先启动tracker.conf
(2)启动storage.conf
(3)使用fdfs_monitor检测环境:
注意:主要查看storage 1的状态是否是ACTIVE
》fastDFS测试:
(1)上传一个文件:
(2)打开另一个终端,在(~/fastDFS/storage/data)查看:
(3)在(~/fastDFS/storage/data/00/00/wkhs_vlqxxx6176431)查看,经过某些算法转换后存储了。M00为映射目录。
(4)下载该文件,查看:
11、fastDFS文件的上传和下载流程
12、解决动态库找不到的问题
13、fastDFS上传操作源码分析
fastDFS api函数:(可参考fdfs_upload_file.c)
14、使用进程的方式实现文件的上传操作
15、log日志文件的使用
>fdfs_api.h
#ifndef _FDFS_API_H #define _FDFS_API_H int fdfs_upload_file(const char* conf_file, const char* myfile, char* file_id); #endif
>fdfs_api.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include "fdfs_client.h" #include "logger.h" #include "make_log.h" int fdfs_upload_file(const char* conf_file, const char* myfile, char* file_id) { char group_name[FDFS_GROUP_NAME_MAX_LEN + 1]; ConnectionInfo *pTrackerServer; int result; int store_path_index; ConnectionInfo storageServer; // 通过客户端配置文件初始化一些数据 if ((result=fdfs_client_init(conf_file)) != 0) { LOG("111", "222", "fdfs_client_init error - %d", -1); return result; } // 通过从配置文件中读出的数据, 连接追踪器tracker // 通过得到的地址可以访问追踪器 pTrackerServer = tracker_get_connection(); if (pTrackerServer == NULL) { fdfs_client_destroy(); return errno != 0 ? errno : ECONNREFUSED; } *group_name = '