2011-01-27 11 views
3

私はシステムの要素がシステムの他のコンポーネントによって応答されるイベントを生成することによって通信するイベント駆動型システムを設計しようとしています。これらのコンポーネントは互いに独立しているか、または私ができるように、ほとんど独立していることを意図しています。このシステムは、最初はWindows 7で実装され、Delphiで書かれています。生成されたイベントは、Delphiコードによって生成されます。私は、単一のマシン上に記述されたタイプのシステムをどのように実装するのかを理解しています。リモートイベント駆動型システムを実装するためにはどのような要素が必要ですか? - 概要が必要です

さまざまなマシンアーキテクチャ、特にWindows 7とは異なる分散アーキテクチャ上で動作するさまざまなコンポーネントで容易に展開できるようにシステムを設計したいと考えています。それ自身の外部のシステムと通信します。

私は検討が必要なアーキテクチャを調査し、以下に挙げる質問を見てきました。これらは、ハードウェア間通信のメカニズムとして名前付きパイプを利用することを指し示すようです。これらの調査の結果、私は自分のシステムを記述するために以下のことを説明しました。図の最初の部分は、私が開発しているシステムです。私が推測した第二の部分は、将来の実装が可能であるために必要なものです。 Design sketch

これは、次の点につながる:

  1. は、あなたが名前付きパイプを経由してイベントを渡すことはできますか?
  2. この問題に取り組むには、これは適切で分かりやすい構造ですか?
  3. 代替手段がありますか?
  4. (この粒度レベルで)私は何を忘れましたか?

How is event driven programming implemented? How do I send a string from one instance of my Delphi program to another?

編集:私は "@Iはがらくたの答えを与える" 応答十分な配慮から生じる点を与えられていなかった

。彼のポイントへの私の最初の反応は以下のとおりです。

  1. 同期V非同期 - 主に非同期
  2. イベントは、常にFIFOキューになります。
  3. 接続損失 - それほど重要ではない - 私はこれを非厳密に扱う余裕がある。
  4. 無制限のキューは、渡されたイベントを処理するための完全な方法です(できるだけ多くのイベントが生成されることは想定されていません)。
+0

どのようなOSですか? Windows? –

+0

@ S.Lott質問で述べたように、私は最初にWindows 7用に開発しています。将来の実装では、Linuxサーバーでホストされたバックエンドに対して実行されるUI要素をWebベースにすることも関係あります。私はこの種の将来の発展の障害にならないような方法でデザインしたいと思っています。 –

+0

申し訳ありません。タグには通常、オペレーティングシステムが含まれています。私はなぜOSがタグから省略されたのか不明でした。 –

答えて

3

を構築する準備ができて、私は実行人気のあるオープンソースのメッセージブローカーを見てみることをお勧めしますJavaプラットフォーム上で標準プロトコルを使用する。 Delphiやその他のプログラミング言語とうまく統合され、Webアプリケーションで使用でき、インストールされたユーザーベースとアクティブなコミュニティが大きくなります。

数分でインストールと設定が非常に簡単で、Delphiの無料/商用クライアントが利用できます。

いくつかの例は以下のとおりです。

私も月によって本 "エンタープライズ統合パターン" をお勧めしますスズファウラーの概要と紹介、特定の問題を扱うための多くの簡単なレシピ。


私は、このようなxmlBlaster、RabbitMQの、アマゾンシンプルなキューサービスと前述した3つのブローカなどのエンタープライズメッセージングシステムのための商用Delphiのクライアントの開発者です注意してください。

+0

これらのメッセージブローカーのすべてがイベントを処理すると仮定していると思うのは間違いありませんが、これは基本的なように見えるかもしれませんが、これは明確ではない点の1つです。 –

+1

メッセージブローカーは、パフォーマンスを維持するために、ほとんどの場合、単純なデータ転送タイプまたはキー/値マップを使用しますが、シリアライズ可能なオブジェクトやシンプルなデータ型で表現できる場合は、ブローカーが処理できます。 – mjn

2

私はここにあなたのポイント4のために答えることができます。イベントは同期または非同期である場合は、まだ決めていません。非同期の場合、メッセージが到着したときに何をすべきかを決定する必要があります。キューがありますか?待ち行列の大きさはどれくらいですか?キュー内の任意の要素を取得できますか、それとも厳密にはFIFOですか?メッセージが失われた場合(他の軸のネットワークケーブル)はどうなりますか?

シンクロバリエーションでは、配信の保証が得られるという利点がありますが、突然接続が失われた場合はどうしますか?

接続損失が問題になります。あなたが持っているマシンが増えれば、それが起こる可能性も大きくなります。どのようにそれを処理するかを決めます。

大きなイベントと小さいイベントがある場合は、別の問題が発生する可能性があります。転送FIFOの順番は最小か最初か?イベントを再配列することはできますか?ここでの仮定は何ですか?


私はErlangをたくさんハックしています。 Erlangでは、すべてのイベント処理はすでに解決されていますが、特定のモデルが選択されていることも意味します(非同期、無制限のキュー、配信保証なし、接続損失の検出)。

1

私はRabbitMQ、http://www.rabbitmq.com/を見ることをお勧めします。それはサーバーとクライアントを持っています。ただ、Delphiでは、いくつかのラッパーコードを必要とし、あなたのビジネスロジックの最大導入の柔軟性(オペレーティング・システムに依存しない)のために

乾杯

+0

あなたはコンポーネントを使用することができます[http://stackoverflow.com/questions/4811734/what-elements-are-needed-to-implement-a-リモートイベント駆動型システムの概要 - n/4813453#4813453)その[mjn](http://stackoverflow.com/users/80901/mjn)彼らは良い。 –

関連する問題