我正在使用 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);
}
}
为什么在我的情况下,当处理速度很慢时,经销商可以毫不拖延地发送?