【问题标题】:ZMQ c# binding HWM not workingZMQ c#绑定HWM不起作用
【发布时间】:2013-03-20 17:36:48
【问题描述】:

HWM 似乎在 clrzmq 2.2.5 中不起作用。 这是我的代码

    private static ulong hwm = 50;
    static void testMQ()
    {

        var _Context = new Context(1);

        var pubSock = _Context.Socket(SocketType.PUB); 
        pubSock.HWM = hwm;  
        pubSock.Bind("tcp://*:9999");

        new Thread(testSub).Start(); 
        Thread.Sleep(1000); // client connect

        int i = 0;
        while (true)
        {
            pubSock.Send(i.ToString(), Encoding.ASCII);
            Debug.WriteLine(pubSock.Backlog + "/" + i++);
        }
    }

    static void testSub()
    {
        var _ZmqCtx = new Context(1);

        var subSock = _ZmqCtx.Socket(SocketType.SUB);
        subSock.HWM = 500;
        subSock.Identity = new ASCIIEncoding().GetBytes("bla");
        subSock.Connect("tcp://127.0.0.1:9999");

        Debug.WriteLine("connected");
        subSock.Subscribe("", Encoding.ASCII);
        while (true)
        {
            Debug.WriteLine("r:" + subSock.Recv(Encoding.ASCII));
            Thread.Sleep(10);
        }
    }

输出:

'quickies.vshost.exe' (Managed (v4.0.30319)):      
Loaded 'B:\sdev\MSenseWS\GoogleImporter\bin\Debug\clrzmq.dll', Symbols loaded.
connected
r:0
100/0
100/1
100/2 
[...]
100/13
r:1
100/14
[...] 
100/2988
100/2989
100/2990
100/2991
100/2992
100/2993
100/2994
100/2995
100/2996
r:179
100/2997
100/2998

预期行为: pubSock.Send 在 500 条消息排队后阻塞。 经验行为:pubSock.Sends 不会阻塞并永远发送,直到抛出内存异常vom native code (clrzmq.dll)。

还有:为什么 backlog 总是 100?

感谢您的见解, 阿明

编辑:推送/轮询套接字达到相同的结果

# #

分辨率: - 错误在我这边,因为我期望 HWM 是客户端尚未提交(接收)的未完成消息的数量。虽然实际上 HWM 是缓冲和排队等待通过网络发送的消息数。

  • 在我的例子中,我的客户端处理消息的速度不够快,因此分配了缓冲区空间,直到内存不足。

  • 为了解决这个问题,我发现在客户端套接字上设置 HWM 和 SWAP 可以解决我的问题,因为消息通过 zmq 排队到一个大型交换文件中,并由应用程序连续处理。

【问题讨论】:

  • 在这种情况下您的客户端是否正在连接?由于我没有在输出中看到您发送到调试日志的“已连接”。
  • 是的,它正在连接,我已将前几行添加到帖子的输出中...

标签: zeromq


【解决方案1】:

啊,所以我猜你让订阅者线程休眠了,但这并不意味着底层的 ZMQ 套接字线程也休眠了。因此,订阅者将继续从发布者队列中取出消息。换句话说,使用Thread.Sleep() 可能不足以模拟有限的网络连接或您预计会导致运行到 HWM 的其他问题。

【讨论】:

  • 谢谢。这与许多其他 mq 框架完全不同。我已经更新了帖子...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2011-08-19
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多