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

1

几个原因,第二次测试时socket已经连接,所以你发送经销商的高水位和接收路由器的高水位。如果您也将其设置为 10,则总共为 20。但是,您还具有套接字缓冲,默认情况下为 8mb

于 2015-09-18T19:11:09.733 回答