3

いくつかのアプリケーション (すべて C#、C++、Python などの異なる言語で記述) をリンクすることを検討していますが、どうすればよいかわかりません。

リンクとはどういう意味ですか? 私が取り組んでいるシステムは、それぞれが特定の処理タスクを担当する小さなプログラムで構成されています。あるアプリケーションから別のアプリケーションにデータ セットを簡単に転送できるようにする必要があり (問題のデータ セットは巨大ではなく、おそらく数メガバイトです)、操作の現在の状態を制御する何らかの方法も必要です (これはクライアントサーバーモデルがベルを鳴らします)

ソケットや SOAP が普遍的な解決策のように思えますが、このテーマについて人々がどう考えているかについて意見を求めたかっただけです。

コメント/提案をお待ちしております。

4

6 に答える 6

2

個人的にはØMQが好きです。メッセージを渡すための使い慣れた BSD ソケットのようなインターフェイスを持つライブラリですが、タスクを分散するための興味深いパターンが実装されていることがわかります。

複数のプロセスをパイプラインに配置したいようです。ØMQ では、プッシュ ソケットとポーリング ソケットを使用してこれを行うことができます。(そしてその後、ほとんど労力をかけずに複数のプロセスやマシンにスケールアップすることさえ可能であることがわかるでしょう。)開始するためのガイドと、特にプッシュとプルがどのように機能するかについてのzmq_socket(3)マンページを見てください。

バインディングは、言及したすべての言語で利用できます。

メッセージの内容については、ØMQ 自体は関係ありません。メッセージは単なる生データのブロックです。JSON やProtocol Buffersなど、自分に合った任意の形式を使用できます。

私がよくわからないのは、あなたが言及している「制御状態」です。たとえば、途中で仕事をキャンセルすることに興味がありますか?

于 2010-12-03T20:04:47.837 に答える
1

C#からC#の場合は、WindowsCommunicationFoundationを使用できます。PythonやC++でも使用できる場合があります。

名前付きパイプをチェックアウトすることもできます。

于 2010-12-03T20:01:42.913 に答える
0

すべてのアプリケーションが監視するデータを一元化することで問題を解消するモデルに移行することを検討します。いわば「信頼できる唯一の情報源」を維持します。

于 2010-12-03T20:03:13.083 に答える
0

ほとんどの外部ソフトウェアは、シンボルに使用する名前マングリングアルゴリズムが原因で、C++コードとのリンクに問題があります。そのため、他の言語で記述されたプログラムとインターフェイスする場合は、ブロックとして、extern "C"またはextern "C" {ブロック内でラッパーを宣言するのが最適な場合がよくあります。

于 2010-12-03T20:03:57.973 に答える
0

プロセス間通信を行うには多くの方法があります。あなたが言ったように、ソケットは普遍的な解決策かもしれません。SOAP はやややり過ぎだと思います。メールスロットを使用することもできます。数年前にそれを使用して C++ アプリケーションを作成しました。名前付きパイプも解決策になる可能性がありますが、Windows でコーディングしている場合は難しいかもしれません。

私の意見では:

  1. ソケット
  2. メールスロット

最有力候補です。

于 2010-12-03T20:15:43.690 に答える
0

あるアプリケーションから別のアプリケーションにデータ セットを簡単に転送できるようにする必要があります (問題のデータ セットは巨大ではなく、おそらく数メガバイトです)。

ファイルシステムを使用します。

また、操作の現在の状態を制御する何らかの方法も必要です

ここでも、ファイル システムを使用します。JSON のシリアル化されたオブジェクトを含む "current_state.json" ファイルは、複数の言語を扱うのに最適です。

ソケットまたは SOAP が普遍的なソリューションになるようです。

多分。しかし、この種のことはやり過ぎです。お使いの OS には、必要な機能がすべて備わっています。ファイルシステムを使用するだけです。これは非常にシンプルで信頼性が高いです。

于 2010-12-03T20:05:06.077 に答える