IPC に入るとき、いくつかのヒント:
- 1 つのプロトコルに縛られないでください。たとえば、名前付きパイプ通信を実装する場合、後でネットワークまたは HTTP を介して実行する必要が生じる可能性があります。
- 車輪を再発明したり、独自のメッセージを使用したりせず、標準形式 (XML / JSON / BSON など) を使用しないでください。
- 一般的なパターンは、各デスクトップ クライアントにサーバーを実装し、サーバーから通知を受け取ることになるため、コールバック イベントの実装はやや困難です。
デスクトップ アプリケーションでは、コールバックを使用するのではなく、ステートレスアーキテクチャでポーリングすることをお勧めします。サーバーとの通信チャネルを開き、1 秒 / 0.5 秒 ( UI で a を使用) ごとに、何が変更されたかを尋ねる小さな要求を行います (リビジョン番号または最後に取得したタイムスタンプを入力できます)。したがって、デスクトップ データを保留中のイベントと同期します。既存の接続で更新を要求するのは非常に高速で、何も変更されていなければ、ネットワークを介して 1 つの IP パケットを送受信するだけです。これは非常に小さなタスクであり、クライアントもサーバーも遅くなりません (メモリ内キャッシュを使用している場合)。TTimer
実際には、実際のアプリケーションでは、このようなステートレスアーキテクチャは、エンド ユーザーの観点から非常に応答性が高く、デプロイがはるかに簡単です。デスクトップ アプリケーションごとにサーバーを作成する必要がないため、ファイアウォール ポートなどを開く必要はありません。HTTP はステートレスであるため、インターネット フレンドリーですらあります。
サービスを開発したい場合は、 RemObjectsのようなDataSnapを使用するか、GDI メッセージを使用してインプロセスで REST を介して軽い JSON メッセージを使用してインターフェイス ベースのサービスを作成できるオープン ソースの mORmot フレームワークを試すことができます。パイプまたは TCP/HTTP - 無料で、無敵のパフォーマンス、ビルトイン セキュリティ、Delphi 6 から XE2 まで。イベントベースのタスクの場合、mORMotで利用可能なクライアント サーバー ORM を使用するだけですイベントを格納するテーブル/クラスを作成し (ラウンド ロビン インメモリ ストレージを定義することもできます。ここでは SQLite3 エンジンや DB を使用する必要はありません)、最後の更新以降の保留中のすべてのイベントを要求します。また、サーバーは安全にバックグラウンド サービスまたは通常のアプリケーションにすることができます。一部のmORMotユーザーは、同じ実行可能ファイルを、スタンドアロン アプリケーション、サーバー サービス、アプリケーション サーバー、または UI クライアントのいずれかにすることができます。構成。
編集/発表:
mORMotロードマップでは、サーバーからの一方向のコールバックを簡単に実装するための新しい機能を追加しました。
つまり、透過的な「プッシュ」モードをサービス指向アーキテクチャ フレームワークに追加します。目的は、単一の HTTP 接続を介しても、いくつかの定義を介して、Delphi コードから非常に簡単にサーバー側からトリガーされる通知イベントを実装することinterface
です。たとえば、WCF ではこれが許可されていません。デュアル バインディングが必要になるため、openファイアウォールポートなど。
これは、パブリッシュ/サブスクライブ パターンを介して簡単なイベント コラボレーションに使用され、イベント ソーシングを可能にします。ポーリングとロック アンド ウェイトの 2 つのモードを実装できるようにします。あなたの質問に対する直接的な答え。