当前位置: 首页 > news >正文

【lesson4】服务端配置信息模块实现

文章目录

  • 设计服务端系统配置信息
  • 配置信息模块实现
    • 成员变量
    • 成员函数的实现
      • 单例接口的提供
      • 加载配置文件信息
      • 实现获取配置文件信息的接口

设计服务端系统配置信息

使用文件配置加载一些程序的运行关键信息可以让程序的运行更加灵活。
配置信息:

  • 热点判断时间
  • 文件下载URL前缀路径
  • 压缩包后缀名称
  • 上传文件存放路径
  • 压缩文件存放路径
  • 服务端备份信息存放文件
  • 服务器访问 IP 地址
  • 服务器访问端口
{"hot_time" : 30, "server_port" : 8080,"server_ip" : "192.168.121.132",//设计自己服务器的ip"download_prefix" : "/download/","packfile_suffix" : ".lz","pack_dir" : "./packdir/","back_dir" : "./backdir/","manager_file" : "./back.dat"
}

配置信息模块实现

成员变量

private:static Config* _instance;//设计成单例模式,全局只初始化一个static std::mutex _mtx;//存在多线程或者多进程访问的肯,需要加锁
private:int _hot_time;//热点时间int _server_port;//服务端端口号std::string _server_ip;//服务端IPstd::string _download_prefix;//下载文件的前缀std::string _packfile_suffix;//压缩文件的后缀std::string _pack_dir;//保存压缩的目录路径std::string _back_dir;//保存备份文件的目录路径std::string _backup_file;//保存备份文件信息

成员函数的实现

private:Config(){ReadConfigFile();}bool ReadConfigFile()//加载配置文件的信息到类中{}public:static Config* getIstance()//提供单例获取接口{}int getHotTime()//获取热点时间{}int getServerPort()//获取服务端端口{}std::string getServerIp()//获取服务端IP{}std::string getDownloadPrefix()//获取下载前缀{}std::string getPackfileSuffix()//获取备份后缀{}std::string getPackDir()//获取压缩目录路径{}std::string getBackDir()//获取备份目录路径{}std::string getBackupFile()//获取保存备份文件信息的文件路径{}

单例接口的提供

static Config* getIstance()
{//外层for循环式为了减少加锁解锁的次数,提高效率if(_instance == nullptr){_mtx.lock();if(_instance == nullptr){_instance = new Config();}_mtx.unlock();}return _instance;
}

加载配置文件信息

配置文件信息的存储格式,是以Json的存储格式保存的

bool ReadConfigFile()
{//1.读取配置文件内容fileUtil fu(CONFIG_FILE);std::string body; bool ret = fu.getContent(&body);if(ret == false){std::cout << "ReadConfigFile getContent faile" << std::endl;}//2.对内容进行反序列化Json::Value root;ret = cloud::JsonUtil::UnSerialize(body, &root);if(ret == false){std::cout << "ReadConfigFile UnSerialize faile" << std::endl;}//保存配置文件信息到类成员变量中_hot_time = root["hot_time"].asInt();_server_port = root["server_port"].asInt();_server_ip = root["server_ip"].asString();_download_prefix = root["download_prefix"].asString();_packfile_suffix = root["packfile_suffix"].asString();_pack_dir = root["pack_dir"].asString();_back_dir = root["back_dir"].asString();_backup_file = root["backup_file"].asString();}

实现获取配置文件信息的接口

int getHotTime()
{return _hot_time;
}
int getServerPort()
{return _server_port;
}
std::string getServerIp()
{return _server_ip;
}
std::string getDownloadPrefix()
{return _download_prefix;
}
std::string getPackfileSuffix()
{return _packfile_suffix;
}
std::string getPackDir()
{return _pack_dir;
}
std::string getBackDir()
{return _back_dir;
}
std::string getBackupFile()
{return _backup_file;
}

相关文章:

  • 【C#】IndexOf的使用
  • PCIe学习——重点提纲
  • Flutter开发效率提升1000%,Flutter Quick教程之定义Api(三)
  • 24.钩子注入的注意事项
  • 年薪80w的AI产品经理技术知识合集
  • Windows 10 找不到Microsoft Edge 浏览器
  • 【Vue】构建vuex-cart模块
  • 【SpringBoot + Vue 尚庭公寓实战】租期管理接口实现(四)
  • 重点关注!2024年影响因子即将发布!
  • ElementUI之表格组件
  • 专属部署的优势和企业价值
  • 优化家庭网络,路由器无线中继配置全攻略(中兴E1600无线中继设置/如何解决没有预埋有线网络接口的问题/使用闲置路由实现WIFI扩展)
  • 数据仓库之拉链表
  • 人工智能在【多模态:多组学+复发转移+肿瘤起源】的最新研究进展|顶刊速递·2024-06-11
  • 家庭服务机器人和智能家居有什么区别
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • Centos6.8 使用rpm安装mysql5.7
  • idea + plantuml 画流程图
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java知识点总结(JavaIO-打印流)
  • Mybatis初体验
  • Swoft 源码剖析 - 代码自动更新机制
  • Vue--数据传输
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 爱情 北京女病人
  • 如何学习JavaEE,项目又该如何做?
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 首页查询功能的一次实现过程
  • 温故知新之javascript面向对象
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 源码安装memcached和php memcache扩展
  • 运行时添加log4j2的appender
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • $forceUpdate()函数
  • (07)Hive——窗口函数详解
  • (1)虚拟机的安装与使用,linux系统安装
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (C语言)逆序输出字符串
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (function(){})()的分步解析
  • (七)Flink Watermark
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转)我也是一只IT小小鸟
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • *p++,*(p++),*++p,(*p)++区别?
  • ./configure,make,make install的作用
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET 8.0 中有哪些新的变化?
  • .net core 控制台应用程序读取配置文件app.config