質問

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

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

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

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

役に立ちましたか?

解決

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

は、単純なファイルを使用すると、それはKISSの原則、次のいずれかの追加のソフトウェア(例えばA daetabaseサーバーまたはいくつかのミドルウェア)を必要としないという利点があります。しかし、もちろん、それはセクシーから遠い;-)、正しい流行語技術を使用していません。

他のヒント

(あなたがVPNを実行していない限り)

は、共有メモリは、ウェブ経由で動作しません、それは(非同期化することができビューとあなたがネットワーク経由でそれらを同期させることはできません)一般的には、ネットワーク上でうまく動作しません。

私はあなたの仕事にいくつかのソリューションを見ることができます:

このようMSMQ、kbmMW、私たちのMsgConnectとして

オプション1.メッセージ指向ミドルウェア(MOM)、唯一のあなたのデータの変更などが放送通知します。この方法では、クライアントがデータのスナップショットのためにさらにサーバーをポーリングする必要はありません。すべてのMOMソリューションは、操作のためのTCP接続を使用し、これはメールスロットよりも信頼性があります。

オプション2.いくつかのクライアントサーバDBMSは、おそらくクライアントへの通知をサポートするもの(私はあなたの名前を言うことができないので、私はDMBSの専門家ではないです)。

あなたは、このようななどDBISAM、Firebirdの、などのデータベースを使用することができます。.. DBISAMで、私はヘッダであるように思わデータベースファイルの最初の8つのバイトを読み込むのトリックを使用しました。それが変化した場合、私はそれ以外の場合はしていない、テーブル内のデータが変更されたことを知っています。あなたは、ポーリングループを使用する場合は、クライアントでこれを利用したり、通知方法としてメールスロットを使用し続けたい場合。すなわち、10秒ごとまたはメールスロットの通知の際には、どちらが最初に来るのファイルをポーリングします。

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

私たちは似たようなのためにMSMQを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top