1

私はゼロからアプリケーションを設計している最中です。既存のソリューションを使用して実現したい要件が 1 つあります。

構成情報を通信するためのトランスポートと方法を、アプリケーションの存続期間全体で統一したいと考えています。

これは何を意味するのでしょうか?これは、ロード時の構成にファイルを使用し、その後の構成にソケット通信を使用することはできないことを意味します。すべての構成を 1 つの方法でアプリケーションに入力したいと考えています。このコンジットは、アプリケーションの存続期間を通じて常に利用可能です。

これに加えて、私は自分自身を IP の使用に拘束したくありません。System V 共有メモリや IPC など、好きなトランスポートを使用したいと考えています。

そこに何かありますか?自分で作成する必要がありますか?

4

1 に答える 1

0

以下があなたが探している機能を正確に提供するとは思いませんが、考える余地があるかもしれません...

アプリケーションの名前myAppが で、-cfg <...>コマンドライン オプションを使用して構成のソースを指定するとします。次のオプションを許可できます...

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

上記は明らかです。指定されたファイルから構成を読み取ります。

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

プレフィックスはexec#、指定されたコマンドを実行する必要があることを指定します。コマンドは標準出力に書き込むことが期待されます。次に、その標準出力が構成ファイルとして解析されます。

ちなみに はcat URLcurlの略です。HTTP(S)、FTP(S)、LDAP など、さまざまなプロトコルを使用してファイルを取得できるオープンソースのユーティリティです。エラーメッセージを除いて診断を出力しないように指示するコマンドラインオプション。これはおそらくあなたが望むものです。-sScurl

この"exec#..."形式は、他の手段を使用して構成情報を取得する方法を提供します。たとえば、データベースにクエリを実行するスクリプトから、Subversion リポジトリから、または必要なものから。

次のバリエーションもサポートすることをお勧めします。

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

これにより、 という共有ライブラリがロードされ、そのfoo中のエントリポイント関数が呼び出され、" がパラメータとして渡さ"...れます。パラメータに基づいてどのように動作するかは、共有ライブラリ関数によって決定されます。共有ライブラリの 1 つの実装では、共有メモリからの構成情報; 別の実装では、リモート プロシージャ コールまたはソケット接続を介して取得する場合があります。

さまざまな取得メカニズムはすべて、構成データを (潜在的に大きな) 文字列として取得する役割のみを担います。たとえば、-cfg /path/to/file.cfgメカニズムはファイルの内容全体を読み取り、それを文字列 (またはおそらく ) として返しますstd::istream。その (潜在的に大きい) 文字列は、「実際の」構成パーサー (XML/ini/properties ファイルなどのパーサー) に渡されます。

上記の提案は、あなたの質問の半分に対する解決策を提供すると信じています。特に、任意のソースから構成データを取得するためのプラグイン アーキテクチャを提供します。プラグインは、シェル コマンドまたは共有ライブラリとして記述できます。

あなたの質問の残りの半分は、基本的に、「アプリケーションは、更新された構成データをその存続期間中に動的に取得するにはどうすればよいですか?」です。私はその要件に対処していません。部分的には、提供できるエレガントなソリューションがないためです。部分的には、構成データの再読み取りをトリガーする可能性のあるものを示していないためです。

ところで、私はConfig4*と呼ばれる C++/Java 構成パーサー ライブラリーのメンテナーです。そのライブラリは、"exec#..."機能の実装を提供します。ソースコードを調べて、そのような機能を実装する方法を確認したい場合に備えて言及します。サポートに必要な"shared_lib=foo#..."コードは、サポート用の既存のコードに基づいて簡単にモデル化できると思い"exec#..."ます。「Config4* 入門ガイド」 (Web サイトから PDF および HTML 形式で入手可能) には、-cfg "exec#..."悪意のあるコマンドの実行を防止するためのセキュリティー・メカニズムなど、機能に関する適切な説明が記載されています。

于 2012-04-25T21:45:50.553 に答える