gpt4 book ai didi

c++ - 是否有用于配置应用程序的标准 session 层协议(protocol)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:04 24 4
gpt4 key购买 nike

我正在从头开始设计一个应用程序。我有一个要求,我想使用一个已经存在的解决方案来满足它。

我希望在应用程序的整个生命周期中使用统一的传输配置信息的传输方式和方法。

这是什么意思?这意味着在加载时使用文件进行配置,然后使用套接字通信进行后续配置是行不通的。我希望所有配置都以一种方式进入应用程序。该管道在应用程序的整个生命周期内始终可用。

除此之外,我不想将自己束缚于必须使用 IP。我想使用任何我喜欢的传输方式,包括 System V 共享内存或 IPC 之类的东西。

外面有什么东西吗?我必须自己创建吗?

最佳答案

我认为以下内容不会完全提供您正在寻找的功能,但它可能会提供一些思考空间...

假设您的应用程序名为 myApp , 和 -cfg <...>命令行选项用于指定其配置源。您可以允许以下选项...

myApp -cfg /path/to/configuration/file.cfg

上面很明显:从指定文件读取配置。

myApp -cfg "exec#curl -sS http://configWebServer/path/to/file.cfg"

exec#前缀指定应该执行指定的命令。预计该命令将写入标准输出。然后将该标准输出解析为配置文件。

顺便说一下,curl代表cat URL .它是一个开源实用程序,可以使用各种协议(protocol)检索文件,包括 HTTP(S)、FTP(S)、LDAP 等。 -sS curl 的命令行选项告诉它除了错误消息外不要打印诊断信息,这可能是您想要的。

"exec#..." format 为使用其他方式检索配置信息铺平了道路。例如,来自查询数据库的脚本、来自 Subversion 存储库或您想要的任何内容。

您可能还想支持以下变体:

myApp -cfg "shared_lib=foo#..."

这将加载一个名为 foo 的共享库, 并在其中调用入口函数,传递 "... “作为参数。共享库函数将决定如何对参数进行操作。共享库的一种实现可能从共享内存中检索配置信息;另一种实现可能通过远程过程调用或套接字检索它连接;等等。

所有不同的检索机制负责将配置数据检索为(可能很大的)字符串。例如,-cfg /path/to/file.cfg机制读取文件的全部内容并将其作为字符串返回(或者可能作为 std::istream )。然后将该(可能很大的)字符串传递给“真正的”配置解析器(XML/ini/properties 文件或其他文件的解析器)。

我相信上面的建议可以解决你一半的问题。特别是,它提供了一种插件架构来从任意来源检索配置数据,其中插件可以编写为 shell 命令或共享库。

您问题的另一半基本上是:“应用程序如何在其生命周期内动态检索更新的配置数据?”我没有解决这个要求。部分原因是我没有提供优雅的解决方案。部分原因是您没有指出什么可能触发重新读取配置数据。

顺便说一下,我是一个名为 Config4* 的 C++/Java 配置解析器库的维护者.该库提供了 "exec#..." 的实现。功能。我提到,如果您想检查源代码以查看如何实现此类功能。我怀疑支持 "shared_lib=foo#..." 所需的代码可以很容易地在现有代码上建模以支持 "exec#..." . “Config4* 入门指南”(可从网站获取 PDF 和 HTML 格式)很好地讨论了 -cfg "exec#..."功能,包括防止人们尝试执行恶意命令的安全机制。

关于c++ - 是否有用于配置应用程序的标准 session 层协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10306228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com