0

私は 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);
    }
}

私の場合、処理が遅いのにディーラーが遅延なく送信できるのはなぜですか?

4

1 に答える 1