2012-04-12 5 views

答えて

2

参照:http://api.zeromq.org/2-1:zmq-setsockopt

ZMQソケットが最高水準の概念を持っています。ドキュメントから

:zmqソケットのタイプごとに

The high water mark is a hard limit on the maximum number of outstanding messages ØMQ shall 
queue in memory for any single peer that the specified socket is communicating with. 

If this limit has been reached the socket shall enter an exceptional state and depending on 
the socket type, ØMQ shall take appropriate action such as blocking or dropping sent messages. 

(REQ、REP、PUB、SUBなど)あなたはそれの行動上の文書を確認することができます - それはブロックがメッセージの送信またはそれらをドロップします。

ほとんどの場合、クライアントの接続が切断されると、メッセージが破棄されます。それが重要な場合は、ZMQパターンの上にメッセージの永続性と信頼性を構築する必要があります。

1

あなたが使用できる戦略はいくつかあり、ニーズに応じています(誰にも答えられません)。

一般に、クライアントが切断すると、サーバー側のキューが削除されます。これはPUBからSUBへのフロー、PUSHからPULLへのフローに当てはまります。

接続を頻繁に処理する場合は、ROUTER-DEALERを使用して、接続(接続する前にDEALER側)でIDを設定します。それからROUTERは、それがなくなって戻ってきても、ディーラーのメッセージを待ち行列に入れます。その後、HWMを使用してそのキューのサイズを制限できます。

タイムアウトが必要な場合、ZeroMQはメッセージを永遠に保存するか、キューに入れられない場合にすぐにメッセージをドロップするので、ややこしいことです。サーバーの独自のリスト構造にメッセージをキューイングし、HWMを1に設定し、ノンブロッキング送信を使用してそれらのスペースが空いている状態でキューからそれらをプッシュする必要があります。その後、クライアントを期限切れにして、それらに関連付けられたキューを削除することができます。仕事のように聞こえるが、かなりシンプルだ。

関連する問題