3

Linux(Server)ホスト上の1つのアプリケーションが、VM内のWin7(Client)上のアプリケーションと通信するようにしたい。選択するLibはZeroMQです。しかし、非同期タスクを管理するにはどうすればよいですか?

例を挙げましょう。VM内のアプリケーションは、任意の間隔でタスクを生成し、それらをLinuxボックスに送信します。これはそれらを処理しますが、答えるのに少し時間が必要です。このとき、REQ / REPパターンのソケットはブロックされ、WinAppからの着信タスクをLinuxAppに転送することはできません。これをどのように解決すればよいですか?0MQがなくても、これは一般的にどのように解決されますか。サーバーとクライアントの両方を作成し、2つの接続を確立する必要がありますか?

要件:

  • クライアントは独自のタスクジェネレータです。
  • サーバーは、接続しているクライアントごとにワーカースレッドを作成します。
  • サーバーは、クライアントとワーカースレッドの間に一意の接続を確立します。
  • ->(1つのソケット上の各クライアントとワーカースレッドのペア間のREQ / REQ)
  • サーバーは着信タスクを即座に転送する必要があります。
  • サーバーは、複数のクライアント(したがって、WTへの接続)を処理できる必要があります。

したがって、REQ / REP / REQ / REP/...シーケンスを実現することはできません。

4

3 に答える 3

4

ZMQガイドで説明されているいくつかのパターンを見て、そのうちの1つが単純なものよりも適しているかどうかを確認してくださいREQ/REP

一般に、Linuxボックス上のサーバーには、ROUTER/DEALER着信タスクを一連のワーカーに転送するパターンの実装が必要なようです。

ZMQには、従来のソケットベースのクライアント/サーバーソリューションと比較して独自のトポロジがあります。他の解決策は、スレッドプールを使用して着信タスクを転送するソケットベースのサーバーを実装することです。

更新: あなたはあなたの要件を正確に把握しているので、私は、majordomoパターンがあなたの目的のための良いそして信頼できる出発点であるかもしれないと思います。@gvdが彼のコメントで言及しているように、より適切なパターンがあるかもしれません。

于 2012-11-06T20:15:16.887 に答える
3

DevNoobが言うように、非同期クライアントサーバーパターンは必要なもののように聞こえます。

「LRU」は最も最近使用されていないことを意味しますが、ガイドの最新のテキストからその用語を削除し、代わりに「負荷分散」を使用しています。目標は一連のワーカー間で負荷分散することなので...

于 2012-11-10T05:07:30.477 に答える
2

選択したライブラリとしてZMQについて言及されていることは知っていますが、Akka(www.akka.io)を謙虚に提案してもよいでしょうか。Akkaには、優れた経験を持つZQM拡張機能があるため、そのトランスポートメカニズム(nettyベース)とZMQの間で簡単に変換できます。これはアクターモデルを実装し、さらに重要なことに、ワーカーアクター間の非同期処理のための「アスク」と「テル」を提供します。Akkaはまた、メッセージングの速度の点でZMQのようなものと非常に有利に競合しているようであり、私の経験でははるかによく文書化されています。

Akkaにないことの1つは言語間のサポートですが、現在これを実現するためにZMQ拡張機能を使用しています。ZMQとAkkaの組み合わせは、確かに非常に強力で柔軟なプラットフォームであることが証明されています。

于 2012-11-18T12:33:54.397 に答える