13

私は新しいクライアント サーバー アプリ (.Net) を開発しており、これまで WCF を使用してきました。これは、アプリの要求応答アプローチに適しています。ただし、これをソケットベースのソリューションに置き換えるように求められました。これは、.Net 以外のクライアントと、将来の pub-sub/broadcast 要件を部分的にサポートするためです (WCF が可能であることは認識していますが、決定の背後には他の要因があります)。独自の非同期ソケット ソリューションの作成に惨めな失敗をしたので、今は ZeroMQ に注目しています。

クライアント アプリには、サーバーから定期的にデータを要求するバックグラウンド スレッドがいくつかあります。さらに、特定の UI アクション (ボタンのクリックなど) は、サーバーへのメッセージをトリガーすることができます。WCF はこれを簡単にしました - コードはシングルトン WCF サービス プロキシで関連するメソッドを呼び出すだけでした (実際には、非同期呼び出し機能を提供するキャッスル ウィンザー WCF 機能を使用していますが、それはおそらく私の質問には関係ありません)。

特にソケットの管理に関して、このアプローチがZeroMQにどのように変換されるかはよくわかりません-私はZeroMQに非常に慣れておらず、まだガイドを読んでいます。各スレッド (つまり、2 つの b/g スレッドと UI) に個別のソケットが必要になると言っているのは正しいですか? ソケットの有効期間について - 送受信するたびに作成するか (おそらく非効率的)、スレッドの開始時にソケットを作成し、スレッドの有効期間全体で再利用しますか?

4

2 に答える 2

16

1つは非常に明確でなければなりません。ZMQソケットは、ZMQソケットにのみ接続および通信できます。

これは、コンポーネントが相互に通信する分散アプリケーションを構築している場合、外部クライアントがそれにさらされていないため、任意の通信アプローチを自由に選択できることを意味します。

そのような手段のためにZMQソケットを選択することは良い考えです。これにより、req / rep、push / pull、pub / subなどの多くの通信パターンを即座に構築でき、ZMQデバイスを使用してより複雑なトポロジを構築することもできます。

ただし、外部クライアントが懸念される場合、この制約は軽視されるべきではありません。これにより、すべての外部クライアントがZMQソケットを使用するように強制されますが、これは理想的ではない可能性があります。クライアントの1つがWebサービスを消費するブラウザである場合は、通常のクライアントを介してサービスを提供する必要があります。

クライアントアプリは通常のソケットを使用していますか?ZMQソケットを使用するように書き直すことはできますか?

そうでない場合は、外部インターフェイスにZMQソケットを使用せず、内部コンポーネントの通信にのみ使用してください。

[編集:追加のメモ]

ZMQはソケットのラッパーですが、手作業で行うのが難しいいくつかのことを行います

  1. 複数のメッセージを同時にバッチ処理することにより、より高いスループットでメッセージングを管理します
  2. 同時にソケットの使用を最適化します
  3. ソケットは他の1つのソケットにのみメッセージを送信でき、ZMQソケットは複数のZMQソケットに接続できます
  4. ZMQソケットベースのソリューションは、さまざまなパターン(REQ / REP、PUSH / PULL、PUB / SUBなど)をすぐに利用できます。

ただし、ZMQをメッセージングキューと間違えるのはよくあることです。

  1. 使用可能なメッセージングキューには、ストレージ用のキューを実装することにより、メッセージの永続性や配信保証などの他のプロパティがあります。
  2. ZMQは「ゼロメッセージングキュー」の略です

私は最近ZMQを学んでいるだけで、それを使用して非常に満足しています。

ZMQに関する私のミニチュートリアルをチェックして、それを使用することが理にかなっているかどうかを確認してください。

http://learning-0mq-with-pyzmq.readthedocs.org/en/latest/

于 2012-06-26T06:44:19.747 に答える
1

城の統合については、Henry が彼のフォークで行ったことを確認してください。

https://github.com/hconceicao/clrzmq2/tree/master/src/integration

于 2012-12-18T00:59:27.997 に答える