非商业组织的网站风格,wordpress该页无法显示,企业网站建设可行性分析,学做网站需要多久时间21. 服务端工具类实现-文件实用工具类设计
不管是客户端还是服务端#xff0c;文件的传输备份都涉及到文件的读写#xff0c;包括数据管理信息的持久化也是如此#xff0c;因此首先设计封装文件操作类#xff0c;这个类封装完毕之后#xff0c;则在任意模块中对文件进行操…21. 服务端工具类实现-文件实用工具类设计
不管是客户端还是服务端文件的传输备份都涉及到文件的读写包括数据管理信息的持久化也是如此因此首先设计封装文件操作类这个类封装完毕之后则在任意模块中对文件进行操作时都将变的简单化。
C17中filesystem手册
/*util.hpp*/
class FileUtil{private:std::string _name;public:FileUtil(const std::string name);size_t FileSize();time_t LastATime();time_t LastMTime();std::string FileName();bool GetPosLen(std::string *content, size_t pos, size_t len);bool GetContent(std::string *content);bool SetContent(std::strint *content);bool Compress(const std::string packname);bool UnCompress(const std::string filename);bool Exists();bool CreateDirectory();bool ScanDirectory(std::vectorstd::string *arry);
};22. 服务端工具类实现-Json实用工具类设计
/*util.hpp*/
class JsonUtil{public:static bool Serialize(const Json::Value root, std::string *str);static bool UnSerialize(const std::string str, Json::Value *root);
};23. 服务端配置信息模块实现-系统配置信息
使用文件配置加载一些程序的运行关键信息可以让程序的运行更加灵活。
配置信息
热点判断时间文件下载URL前缀路径压缩包后缀名称上传文件存放路径压缩文件存放路径服务端备份信息存放文件服务器访问IP地址服务器访问端口
{hot_time : 30, server_port : 9090,server_ip : 192.168.122.136,url_prefix : /download/,arc_suffix : .lz,pack_dir : ./packdir/,back_dir : ./backdir/,manager_file : ./back.dat
}23. 服务端配置信息模块实现-单例文件配置类设计
使用单例模式管理系统配置信息能够让配置信息的管理控制更加统一灵活。
#define CONFIG_FILE ./cloud.confclass Config{private:time_t _hot_time;int _server_port;std::string _server_ip;std::string _url_prefix;std::string _arc_suffix;std::string _pack_dir;std::string _back_dir;std::string _manager_file;//备份信息的配置管理private:static std::mutex _mutex;static Config *_instance;Config();public:bool ReadConfig(const std::string filename);int GetHotTime();int GetServerPort();std::string GetServerIp();std::string GetURLPrefix();std::string GetArcSuffix();std::string GetPackDir();std::string GetBackDir();std::string GetManagerFile();public:static Config *GetInstance();
};24. 服务端模块实现-管理的数据信息
文件实际存储路径文件是否压缩标志压缩包存储路径文件访问URL文件最后一次修改时间文件最后一次访问时间文件大小
25. 服务端数据管理模块实现-如何管理数据
内存中以文件访问URL为key数据信息结构为val使用哈希表进行管理查询速度快。使用url作为key是因为往后客户端浏览器下载文件的时候总是以url作为请求。采用文件形式对数据进行持久化存储序列化方式采用json格式或者自定义方式
26. 服务端数据管理模块实现-数据管理类的设计
/*data.hpp*/
typedef struct BackupInfo{int pack_flag;time_t mtime;time_t atime;size_t fsize;std::string realpath;std::string url;std::string packpath;bool NewBackupInfo(const std::string realpath);
}BackupInfo;class DataManager{private:FileUtil _backup_file;pthread_rwlock_t _rwlock;std::unordered_mapstd::string, BackupInfo _table;public:DataManager();bool InitLoad();//初始化程序运行时从文件读取数据bool Storage(); //每次有信息改变则需要持久化存储一次bool Insert(const std::string key, const BackupInfo val);bool Update(const std::string key, const BackupInfo val);bool GetOneByURL(const std::string key, BackupInfo *info);bool GetOneByRealPath(const std::string key, BackupInfo *info);bool GetAll(std::vectorBackupInfo *arry);
};27. 服务端数据管理模块实现-数据管理类的测试验证
/*cloud.cpp*/
void DataTest();
int main()
{return 0;
}