2012-06-26 11 views
6

Cではソケットとディスクリプタがありますが、これらのうちの1つをスレッドに渡すだけで、着信接続を受け入れることができますあなたが好きなスレッドに作業し、スレッドは応答を返すことができます。ZeroMQ:Cのようなマルチスレッドを実現する方法

私の質問は、私がZeroMQでこれをどのように達成できますか?要求 - 応答パターンでは、私は非同期的に送受信できないようだが、応答は連続していなければならず、目標は複数のクライアントを単一のサーバーに持ち、順番に応答しない。

リクエストレスポンスのパターンを見ましたが、APIには、そのソケットを複数のスレッドで使用することは悪い考えです。たぶん私は何かを見逃しているか、ZeroMQは私が知っているよりも知的です。さらに詳しい情報が必要な場合は、コメントを投稿してください。私は情報を提供するために最善を尽くします。

私はまた、提供されている例を見ていた:私はあなたがそれぞれの着信接続のための新しいスレッドを作成したいサーバーと各スレッドを必要と理解したようZMQ-Socket

答えて

3

zeromqチャネルのIRCの友人が私に助けを与えました。

誰かがまだそれを探している場合のための更新されたリンク。永続する必要があります! http://zguide.zeromq.org/

この例は本当にうまくいきます。適応が容易で、スレッドプールでブーストスレッドを使用しました。

+0

残念ながら、そのページは存在しません。これは答えですのでここに投稿するように気をつけますか? –

+0

こんにちはd -_- bここにwaybackmachineと別のオプションです。http://web.archive.org/web/20120704201150/http://www.zeromq.org/blog:multithreaded-server –

+0

素敵な読書。 Oliverに感謝します。 –

2

:ここCode Examples

は、ソケットの説明です正確に1つの接続に返信してください。これは正確にこれを行うサンプルコードです。 http://www.kieser.net/linux/java_server.html

+0

おかげShahryarあなたの努力のために、ここに私の要求が実際にあります"zeroMq"との理由は、スケーラビリティです。私はzeromqを使用して、別のマシン上の作業者に後でアプリケーションを拡張できるようにしたいと思います。異なるパターンがあり、スケーラビリティが高いです。 –

2

既存のデザインを0MQに適用しようとすると、問題が発生することがよくあります。既存の設計では、ソケット(通常はHTTP)が子プロセスまたはスレッドに渡され、応答が可能になります。非常にエレガントなデザインではありません。新しい接続がソケットとして存在し、応答が送信されるとソケットが破棄されるため、これは機能します。これらのどちらも0MQアプリケーションには適用されません。

0MQデザインは、クライアントからの要求を引き込むフロントエンドROUTERソケットを使用します。次に、要求を処理するためにバックエンドDEALERを使用して、これらの要求をinproc://ソケットを介してワーカースレッドに渡します。ワーカースレッドはREPソケットを使用してリクエストを受信し、返信を返します。その後、メインスレッドは、フロントエンドとバックエンドの両方のソケットをポーリングし、2つの間でメッセージをルーティングします。

その古いブログ記事は(レガシーXREP/XREQ名を使用して)説明するものであり、それはここで多くの言語での例を挙げてより詳細に説明されます:http://zguide.zeromq.org/page:all#Multithreading-with-MQ

関連する問題