是否有用于配置应用程序的标准会话层协议

Is there a standard session layer protocol for configuration of applications?

本文关键字:标准 会话层 协议 应用程序 用于 配置 是否      更新时间:2023-10-16

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

我希望在应用程序的整个生命周期内使传输和传输配置信息的方法保持一致。

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

此外,我不想将自己束缚在必须使用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#..."功能,包括防止人们尝试执行恶意命令的安全机制。