2

私は、データを収集し、TDrawGrid の行ごとに 1 つのチャネルで、多くのチャネルの概要として表示する Delphi 2006 アプリを持っています。ネットワーク上の他のさまざまな PC で同じアプリを実行していますが、これらの他の PC はスレーブです。データを収集するのではなく、要約をリモートで表示するだけです。

現在、スレーブはマスターの要約表示画面の模倣を表示するだけであり、これはマスターからのメールスロットによるブロードキャストを介して実装されます。

これを別の方法で実装して、マスターの負荷を軽減し、スレーブがデータを解釈する方法についてもう少し柔軟性と独立性を提供したいと考えています。また、サブネット間のデータのメールスロット ブロードキャストに問題があります。

共有メモリ スキームを使用して、データをメモリ マップ ファイルに配置し、スレーブがどこからでも (Web 経由でも) アクセスできるようにすることはできますか? マスター フォアグラウンド タスクの応答性を維持するために、最大 100k バイトのメモリ サイズについて話しています。

4

5 に答える 5

4

共有メモリは Web 上では (VPN を実行しない限り) 機能せず、ネットワーク上では一般的にうまく機能しません (ビューは非同期化される可能性があり、ネットワーク上でそれらを同期化することはできません)。

あなたの仕事にはいくつかの解決策があります:

オプション 1. MSMQ、kbmMW、MsgConnect などのメッセージ指向ミドルウェア (MOM) を使用して、データの変更のみを含む通知をブロードキャストします。これにより、クライアントはデータのスナップショットのためにサーバーを追加でポーリングする必要がなくなります。すべての MOM ソリューションは操作に TCP 接続を使用しており、これはメールスロットよりも信頼性が高くなります。

オプション 2. クライアント サーバー DBMS を使用します。これは、おそらくクライアントへの通知をサポートするものです (私は DMBS の専門家ではないため、名前を教えることはできません)。

于 2010-10-01T15:06:53.920 に答える
2

最も簡単な方法は、マスターが書き込み、スレーブが読み取りのみを行う共有上のファイルを使用することです。「ダーティリード」を防ぎたい場合は、何らかの同期が必要になることがあります。一方、表示するデータの種類によっては、問題にならない場合があります。

単純なファイルを使用すると、KISSの原則に従って追加のソフトウェア(daetabaseサーバーやミドルウェアなど)を必要としないという利点があります。しかしもちろん、それはセクシーとはほど遠いです;-)そして正しい流行語技術を使用していません。

于 2010-10-01T18:20:29.600 に答える
2

TCP/IP を使用することの何が問題になっていますか? Indy (すでに Delphi に同梱されています) またはICSを使用して、メイン (マスター) アプリが IP リクエスト (たとえば、HTTP や ICMP など、データのニーズに合ったもの) に 1 つまたは 2 つのスレッドで応答し、「スレーブ」を持つことができます。アプリは、特定のポートでマスターの IP アドレスを介してデータを要求するだけです。これは、イントラネットまたはインターネット経由で透過的に機能します。

于 2010-10-01T17:47:49.663 に答える
2

DBISAM、Firebird などのデータベースを使用できます。DBISAM を使用して、ヘッダーと思われるデータベース ファイルの最初の 8 バイトを読み取るトリックを使用しました。変更された場合は、テーブル内のデータが変更されていることがわかりますが、そうでない場合は変更されていません。ポーリング ループを使用する場合、または通知方法として引き続きメールスロットを使用する場合は、クライアントでこれを利用できます。つまり、10 秒ごと、またはメールスロット通知のいずれか早い方でファイルをポーリングします。

于 2010-10-01T14:58:03.787 に答える
0

同様の目的で MSMQ を使用します。

于 2010-10-01T15:03:54.613 に答える