【高效server实践】--配置文件

配置文件是一个软件程序的基础部分,是用户可以改变的程序运行的方法。配置文件一般是在程序启动的时候读取,并初始化程序,当然写的好的配置模块也支持在程序运行时重新加载配置文件,并做相关的变化。 
良好的配置模块应该具体以下功能 
1:配置文件可以按块配置,这样就允许不同的块里有相关的配置(程序可能依赖很多外部组件,而外部组件一般都要配置ip) 
如: 
[MONGO] 
db=test1 
table=test_table 
serverip=192.168.1.1 
serverport=30000 
slave_serverip=192.168.1.1 
slave_port=30000 

[MYSQL] 
db=test1 
serverip=192.168.1.1 
user=test 
password=123456 
port=3306 
2:读取配置至内存保存 
以链表的方式保存块,键,值,并按顺序串联起来: 
当需要查到某块,键对应的值时,先遍历至到相应的快,再遍历至键处,下一个节点即为值 
Node{ 
int type;//0为默认值,1为键,2为值,3为块 
int block_id; 
Node* next; 

add_value(string str, int block_id,int type); 
getvalue(string key,string block); 

3:当单机有多个实例时,还有区别公有配置和私有配置 
初始化配置链表的时候,把两个配置文件都存入配置链表即可 
4:以键值的方式配置,值的类型支持int,string,和list(以表示符号分割,如:names=lily,john) 
1):所有键值存入链表的时候都是string,支持int时候只要做下atoi转换即可 
2):值类型为list时候,读取值的时候增加个index下标即可:getvalue(string key,string block,int value_index); 
5:不重启程序即可重新加载配置文件(此处应判断配置文件是否发生改变)
1):通过stat可以储存文件状态(包括文件修改时间,文件大小等),比对新旧配置文件的stat即可判断配置文件是否发生改变 
2):向主进程发送信号量中断主进程,主进程重新加载配置,并完成相关组件连接或状态的重置,参考nginx做法也类似 
6:自动忽略空格,空行,注释 
1):注释:#号(含)之后的的字符串删除 
2):空行:大于2个字符的行才是有效配置行 
3):空格:直接替换空格为空
7:处理配置异常 
1):没有=号分隔符的配置行无效 
2):小于3个字符的配置行无效 
3):=号分隔符之后无字符则配置行无效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值