![]() |
1
5
Rob,几点: 1)最好将配置阅读器抽象为API,而不是直接从Perl哈希读取。这样,对该API的任何调用都可以依次决定配置需要做什么(例如,计时器是否已启动)?配置文件时间戳是否更改?). 与往常一样,这还有一个额外的好处,即允许您稍后重新设计配置(perl has=>xml=>database),而无需更改任何软件。 2)鉴于它是一个服务器,我还建议通过一个特殊的请求类型提供按需配置重新加载功能。这允许您通过向服务器发送命令来强制重新加载配置(例如,更新配置文件后),而不是使其反弹。 顺便说一句,如果您遵循1,那么2非常容易完成,因为“reload config”处理程序只需要重置“config needs to be reloaded on the next config api call”标志。 3)如果您坚持将配置作为没有API的散列(例如,出于性能原因消除API子例程调用,这是合理的,但不太可能有帮助),那么您需要将配置放入类中的静态变量中,并让该类提供“set new config”方法。然后,服务器将设置一个计时器,在计时器调用时(或在从2接收到“reload config”命令时)将检查时间戳和/或配置文件的检查和是否与上次调用和重新加载时不同。 |
![]() |
2
3
如果您使用的是最新版本的Linux,那么总会有一种不完善的方法。这意味着您可以在配置写入磁盘后立即重新加载它。退房 Linux-Inotify . 也有 FAM 其他平台。 |
![]() |
3
2
在Unix类型的机器上解决这类问题的传统方法是,服务器程序在收到 signal . 例如, Apache documentation 表示这三个信号对服务器有特殊意义:term告诉服务器关闭,hup强制立即重新启动,usr1请求优雅地重新加载配置文件。如果您在一个支持信号的环境中工作,这种功能可以相对直接地构建到您的程序中。 |
![]() |
4
1
始终可以选择将配置移动到数据库中,并使用DBI Plus数据库触发器使其成为事件驱动的,而不是轮询的。 |
![]() |
5
0
@dvk,噢,用你的观点说得很好1)我没有想过在配置上面添加额外的抽象层。我想把它保留为原始Perl散列的好处是不需要转换层。我会考虑一下其中的权衡。 关于第2点),我们发现Perl中的一些信号处理的薄片使得它不能很好地进行hup,因此我们在站点范围内正式否决了Perl信号hup。 但我真的很喜欢你的想法,一个特殊的查找命令,将迫使重新加载!如果你不介意的话,我就用这个。也许可以使用“GET 127.0.0.1”,因为它可能不会从外部通过!注意:我们最新版本的地理协议是基于HTTP的,因此我们可以从浏览器轻松查询服务。
谢谢!
|
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
BioRod · 我不能用Perl打印键和值 2 年前 |
![]() |
user17227456 · Perl CLI代码无法追加字符串行 2 年前 |
![]() |
LearnToBeBetter · 读取文件,搜索字符串,打印字符串 3 年前 |
![]() |
KJ7LNW · 一些波斯语文本的宽字符印刷,但其他文本则没有 3 年前 |
![]() |
con · 如何搜索大型数据结构并返回一系列给出特定值的键/数组? 3 年前 |
![]() |
Pranay Nanda · 使用regex解析许可证文件 7 年前 |