私は NetMQ を使用してプロトタイプのテストを行っています。特に、HighWatermark オプションの影響を学習しています。
次のケースを理解し、テストしました。
- ROUTER ソケットを持つサーバーはまだ起動していません
- 一方、DEALER ソケットを持つクライアントは 20 個のメッセージを送信しています (SendHighWatermark は 10 です)。
この場合、クライアントは 10 個のメッセージしか送信できず、送信時にブロックされていることがわかります。
次に、処理が遅い別のテストを行いました.ROUTERは、各メッセージを受信した後にスリープします。この場合、DEALER は 10 件のメッセージを迅速に送信し、別の 10 件のメッセージを遅延して送信すると予想しました。しかし、DEALER は遅延なくすべてのメッセージを送信します。
ルーターのコード:
const string processingEndpoint = "tcp://127.0.0.1:6668";
using (var context = NetMQContext.Create())
using (var router = context.CreateRouterSocket())
{
router.Bind(processingEndpoint);
var msg = router.ReceiveMultipartMessage();
Thread.Sleep(5000); // emulate slow processing
}
ディーラーのコード:
const string processingEndpoint = "tcp://127.0.0.1:6668";
string clientIdentity = "fast dealer";
using (var context = NetMQContext.Create())
using (var dealer = context.CreateDealerSocket())
{
client.Options.Identity = System.Text.Encoding.Unicode.GetBytes(clientIdentity);
client.Options.SendHighWatermark = 10;
client.Connect(processingEndpoint);
for (var i = 0; i < 20; i++)
{
var msg = new NetMQMessage();
msg.Append(string.Format("{0}_Payload{1}", clientIdentity, i));
client.SendMultipartMessage(msg);
Console.WriteLine("Sent msg {0}", i);
}
}
私の場合、処理が遅いのにディーラーが遅延なく送信できるのはなぜですか?