是否有用于配置应用程序的标准会话层协议
Is there a standard session layer protocol for configuration of applications?
我正在从头开始设计一个应用程序。我有一个要求,我想使用已经存在的解决方案来满足。
我希望在应用程序的整个生命周期内使传输和传输配置信息的方法保持一致。
这是什么意思?这意味着在加载时使用文件进行配置,然后在以后使用套接字通信进行配置是不行的。我希望所有配置都以一种方式进入应用程序。此导管在应用程序的整个生命周期内始终可用。
此外,我不想将自己束缚在必须使用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
代表猫网址。它是一个开源实用程序,可以使用各种协议检索文件,包括HTTP(S),FTP(S),LDAP等。-sS
命令行选项curl
告诉它除了错误消息之外不打印诊断信息,这可能是您想要的。
"exec#..."
格式为使用其他方式检索配置信息铺平了道路。例如,从查询数据库的脚本,从 Subversion 存储库,或任何你想要的。
您可能还希望支持以下变体:
myApp -cfg "shared_lib=foo#..."
这将加载一个名为 foo
的共享库,并调用其中的入口点函数,将"...
" 作为参数传递。将由共享库函数决定如何对参数进行操作。共享库的一个实现可能会从共享内存中检索配置信息;另一个实现可能通过远程过程调用或套接字连接检索它;等等。
所有不同的检索机制只负责将配置数据作为(可能很大)字符串检索。例如,-cfg /path/to/file.cfg
机制读取文件的全部内容并将其作为字符串(或可能作为std::istream
)返回。然后将该(可能很大的)字符串传递给"真正的"配置解析器(XML/ini/属性文件的解析器或其他任何内容)。
我相信上述建议为您的一半问题提供了解决方案。特别是,它提供了一个插件体系结构,用于从任意源检索配置数据,其中插件可以编写为 shell 命令或共享库。
问题的另一半基本上是:"应用程序如何在其生命周期内动态检索更新的配置数据?我还没有解决这个要求。部分原因是我没有一个优雅的解决方案可以提供。部分原因是您尚未指示可能触发重新读取配置数据的内容。
顺便说一下,我是一个名为 Config4* 的 C++/Java 配置解析器库的维护者。该库提供"exec#..."
功能的实现。我提到这一点,如果你想检查源代码,看看如何实现这样的功能。我怀疑支持"shared_lib=foo#..."
所需的代码可以很容易地模仿现有的支持"exec#..."
代码。"Config4* 入门指南"(可从网站获得 PDF 和 HTML 格式)很好地讨论了-cfg "exec#..."
功能,包括防止人们尝试执行恶意命令的安全机制。
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- 为多个会话保留XPtr
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 编译标准库类型
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 结构和双指针隐藏在其他结构中,多层混淆
- 铸造标准::有没有回到原来的类型
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 如何修复 Onnx运行时会话>运行问题?
- 标准库类型的赋值运算符的引用限定符
- 标准是否严格定义了该程序应该如何编译?
- 如何从Windows应用程序输出到标准?
- 安全到标准:移动会员?
- 标准层和尾填充
- 是否有用于配置应用程序的标准会话层协议