互いにデータを交換する 2 つのアプリを実装する必要があります。両方のアプリは、LAN の一部である別々の PC で実行されます。
Delphi でこれを行うにはどうすればよいでしょうか。
PC 間でアプリ間でデータを簡単に交換できる無料のコンポーネントはありますか?
私が自分で書いている場合、私は(ほとんど)常にソケットを使用してアプリ間でデータを交換します。
軽量で、同じマシン上でローカル ネットワークまたはインターネットを介して変更なしで適切に動作し、サービスなどの異なるアクセス許可を持つアプリ間で通信できます (Windows メッセージはここで問題を引き起こします)。
あなたにとっては必要ないかもしれませんが、私は TCP/IP のようなプラットフォームに依存しないトランスポートのファンでもあります。
Delphi には自由な選択肢がたくさんあります。ここに私が知っているいくつかがあります。ライブラリをブロックするのが好きなら、IndyまたはSynapseを見てください。ノンブロッキングを好む場合は、ICSをチェックしてください。
手法を選択する前に、スループット、粒度、遅延、および重要性に従って通信を特徴付ける必要があります。
スループット -- 移動に必要な単位時間あたりのデータ量は? 可能な値の範囲は非常に広いため、最低レートのアプリケーションと最高レートのアプリケーションにはほとんど共通点がありません。
粒度 -- メッセージの大きさは? 受信アプリケーションがメッセージを使用する前に、どのくらいのデータが必要ですか?
待ち時間 -- 1 つのアプリケーションがメッセージを送信したとき、他のアプリケーションはどのくらいの時間でそれを確認する必要がありますか? 受信側のアプリケーションが送信側のアプリケーションにどれだけ迅速に反応することを望みますか?
重要性 -- 受信したメッセージが後のメッセージによってオーバーランされる前に、どのくらいの時間、受信したメッセージを放置できますか? (これは、スループットが高く、メッセージ ストレージが制限されていない限り、通常は重要ではありません。)
これらの質問に答えたら、特定の状況に最適なテクノロジについて質問を開始できます。
-アル。
DCOM は、以前はプロセス間通信の優れた方法でした。これも Delphi の強みの 1 つです。今日、私はそれを使用しないことを強くお勧めします。
プロジェクトの性質に応じて、どちらかを選択します
メールスロットが保証されていないという警告がありますが、ネットワーク経由で一度に複数の PC と通信する (「ブロードキャスト」) 必要がある場合は、メールスロットを使用していました。
1 対 1 の場合、名前付きパイプはこのようなことを行う Windows の方法です。基本的に 2 台の PC 間の通信チャネルを開き、パイプにメッセージを書き込みます。最初は簡単ではありませんが、非常に信頼性が高く、Windows サービスなどに推奨される方法です。
MS は、SQL Server (TCP/IP 以外) との通信の代替手段として名前付きパイプを提供しています。
しかし、Bruce が言ったように、TCP/IP は標準であり、プラットフォームに依存せず、非常に信頼性があります。
これは、すでに説明したテクノロジーのほぼすべてを使用して2つのアプリケーション間で正確に通信できるため、実際には「最良の」答えがない場合の1つです。使用する方法の選択は、実際には、通信の重要な性質と、あるワークステーションから別のワークステーションに転送する必要のあるデータの量に依存します。
通信が時間に敏感でも重要でもない場合は、定期的な間隔でのデータベースまたはファイルの単純なポーリングで十分な場合があります。通信が重要で時間に敏感な場合は、各クライアントにTCPIPサーバーを配置することをお勧めします。時間に敏感な場合はメールスロットが適していますが、重要であるが時間に敏感でない場合は名前付きパイプが適しています。
私は、この種のことのためにIndyライブラリのマルチキャスト コンポーネント (IdIPMCastClient/Server) を何度も使用しました。アプリは互いに XML を送信するだけです。最小限の接続要件ですばやく簡単に。
「リモート プロシージャ コール」タイプのインターフェイスを使用するソリューションを見てください。私はこのようなことにRemObjects SDKを使用していますが、 RealThinClientのオープン ソース バージョンも同様に機能します。
これらは両方とも、ほとんどのコードで「透過的」な接続を作成することを可能にし、ネットワーク経由でデータを送信して結果を返すインターフェイスを呼び出すだけです。その後、通常の方法でプログラムし、ソケットなどの詳細を忘れることができます。
ネットワーク全体でオブジェクトを「共有」する可能性があります。
私たちの小さな mORMotのようなクライアントサーバー ORM で可能です。
このオープン ソース ライブラリは、Delphi 6 から XE2 まで動作し、送信に JSON を使用します。いくつかのセキュリティ機能が含まれており ( RESTful 認証メカニズムを含む)、任意のデータベースを使用できます。またはデータベースをまったく使用できません。
特に、提供されている最初の 4 つのサンプルと関連ドキュメントを参照してください。
おそらく最も簡単な方法は、ファイル (または、方向ごとに 1 つのファイル) を読み書きすることです。また、シミュレーションやトレースが容易であるという利点もあります。ただし、これは最速のオプションではありません(そして、それは間違いなく不自由に聞こえます ;-) )。
Delphi アプリケーションの統合では、メッセージ指向のミドルウェアがオプションになる場合があります。メッセージ ブローカーは、保証された配信、負荷分散、さまざまな通信モデルを提供し、クロスプラットフォームおよびクロス言語で動作します。オープン ソースのメッセージ メッセージ ブローカーには次のものがあります。
(免責事項 - 私はこれらのサーバー用の Delphi / Free Pascal クライアント ライブラリの作成者です)