74

考えられる IPC メカニズムに関する提案を探しています。

  • クロスプラットフォーム(少なくとも Win32 と Linux)
  • C++および最も一般的なスクリプト言語(perl、ruby、python など) で簡単に実装できます。
  • 最後に、プログラミングの観点から使用するのは簡単です!

私のオプションは何ですか?私は Linux でプログラミングしていますが、将来的には他の OS に移植できるようにしたいと考えています。ソケット、名前付きパイプ、または DBus のようなものを使用することを考えました。

4

16 に答える 16

56

速度の点では、最適なクロスプラットフォーム IPC メカニズムはパイプになります。ただし、これは、同じマシン上でクロスプラットフォーム IPC が必要であることを前提としています。リモート マシン上のプロセスと通信できるようにしたい場合は、代わりにソケットの使用を検討する必要があります。幸いなことに、少なくとも TCP について話しているのであれば、ソケットとパイプはほとんど同じ動作をします。それらを設定して接続するための API は異なりますが、どちらもデータ ストリームのように機能します。

ただし、難しいのはコミュニケーション チャネルではなく、そのチャネルを通過するメッセージです。検証と解析を実行してくれるものを見たいと本当に思っています。Google のProtocol Buffersを参照することをお勧めします。基本的に、プロセス間で渡したいオブジェクトを記述した仕様ファイルを作成します。仕様に一致するオブジェクトを読み書きするためのさまざまな言語でコードを生成するコンパイラがあります。メッセージング プロトコルを作成して自分でパーサーを作成するよりもはるかに簡単です (そしてバグが発生しにくくなります)。

于 2008-09-15T19:22:37.350 に答える
16

C++ については、Boost IPCを確認してください。
おそらく、スクリプト言語用のバインディングもいくつか作成または見つけることができます。

それ以外の場合は、スクリプト言語とのインターフェイスが本当に重要な場合は、ファイル、パイプ、ソケット、または HTTP などのより高いレベルの抽象化を使用することをお勧めします。

于 2008-09-13T16:19:10.520 に答える
10

ポータブルで使いやすく、多言語およびLGPL ed ソリューションが必要な場合は、ZeroMQをお勧めします。

  • 驚くほど高速で、ほぼ線形にスケーリング可能でありながらシンプルです。
  • 単純および複雑なシステム/アーキテクチャに適しています。
  • 利用可能な非常に強力な通信パターン: REP-REP、PUSH-PULL、PUB-SUB、PAIR-PAIR。
  • inproc://スレッド ( )、プロセス ( ipc://)、またはマシン ( )間でメッセージを渡す場合、より効率的にトランスポート プロトコルを構成できます。また、{tcp|pgm|epgm}://VMware 間で接続が実行されている場合にプロトコル オーバーヘッドの一部を削減するスマートなオプションを使用できます。仮想マシン ( vmci://)。

シリアライゼーションについては、必要に応じて、 MessagePackまたは Protocol Buffers (他にも既に言及されています) をお勧めします。

于 2014-07-30T10:22:40.920 に答える
10

なぜD-Busではないのですか?これは、ほぼすべてのプラットフォームで動作し、堅牢性を考慮して設計された、非常に単純なメッセージ パッシング システムです。現時点では、ほぼすべてのスクリプト言語でサポートされています。

http://freedesktop.org/wiki/Software/dbus

于 2008-09-16T17:04:46.143 に答える
8

YAMIを試してみてください。非常にシンプルですが機能的で、移植性があり、いくつかの言語にバインドされています。

于 2008-09-15T22:11:03.607 に答える
5

ソケットに基づいたものが必要になると思います。

IPC だけでなく RPC が必要な場合は、XML-RPC/SOAP のようなものをお勧めします。これは HTTP 上で実行され、どの言語からでも使用できます。

于 2008-09-13T17:17:20.753 に答える
5

FacebookのThriftはどうですか?

Thrift は、スケーラブルなクロス言語サービス開発のためのソフトウェア フレームワークです。ソフトウェア スタックとコード生成エンジンを組み合わせて、C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、Smalltalk、および OCaml の間で効率的かつシームレスに動作するサービスを構築します。

于 2008-09-13T16:21:24.227 に答える
5

YAMI - Yet Another Messaging Infrastructureは、軽量のメッセージングおよびネットワーク フレームワークです。

于 2010-01-25T23:52:16.567 に答える
4

分散コンピューティングは通常複雑であり、車輪の再発明を行う代わりに、既存のライブラリまたはフレームワークを使用することをお勧めします。以前のポスターは、これらのライブラリとフレームワークのいくつかをすでに列挙しています。ニーズに応じて、非常に低レベル(ソケットなど)または高レベルフレームワーク(CORBAなど)のいずれかを選択できます。一般的な「これを使用する」という答えはあり得ません。分散プログラミングについて自分自身を教育する必要があります。そうすれば、仕事に適したライブラリまたはフレームワークを選択するのがはるかに簡単になります。

分散コンピューティングに広く使用されているACEおよびCORBAORBTAO(ACEに基づいて構築されている)と呼ばれるC++フレームワークが存在します。ACE http://www.cs.wustl.edu/~schmidt/ACE/に関する非常に優れた本がありますので、ご覧ください。気をつけて!

于 2008-12-08T22:55:24.297 に答える
4

少し違うことを試してみたい場合は、 ZeroCのICEプラットフォームがあります。これはオープン ソースであり、考えられるほぼすべての OS でサポートされているだけでなく、C++、C#、Java、Ruby、Python、および PHP の言語サポートも備えています。最後に、操作が非常に簡単です (言語マッピングは各言語に自然に適合するように調整されています)。また、高速で効率的です。デバイス用のカットダウン バージョンもあります。

于 2008-09-15T19:39:28.073 に答える
3

パイプは、私が知っているすべての OS でサポートされており、ほぼすべての言語でアクセスできます。

このチュートリアルをチェックしてください。

于 2008-09-13T16:27:20.173 に答える
2

localhost FTW への TCP ソケット。

于 2008-09-13T17:03:28.527 に答える
0

Python には非常に優れた IPC ライブラリがあります: を参照してください。https://docs.python.org/2/library/ipc.html

于 2008-09-16T17:07:42.610 に答える