zeromq pub / sub模式,监听器总是使用busy循环来检查消息?

时间:2015-05-18 05:35:34

标签: zeromq busy-loop

我是ZeroMQ的新手,我看过一些例子,似乎总是让侦听器做忙碌循环来接收消息,例如,在pub/sub模式中。接收者需要这样做来消费消息,

while (true)
{
    var message = socket.Recv(Encoding.UTF8);
    message.Dump();
}

是否存在任何类型的回调机制,例如接收器只是将自己注册到套接字,并且只要有消息就会调用它,而不是忙于循环检查消息。

1 个答案:

答案 0 :(得分:0)

取决于您的语言选择。例如,如果您使用node.js,那么所有都是回调。

您没有指定您的语言选择,也不会指定您的应用程序中发生的事情。通常,您的策略将取决于您的应用程序的整体性质。

您通常会看到一个专注于接收消息的循环的原因有两个:

  1. 这些是示例,这是编写将有效接收和处理消息的示例的最简单方法。
  2. ZMQ是一个高容量的工具集,通常当你使用它时,接收消息对你来说是一项高优先级的任务,所以专用整个线程接收这些消息可能是个好主意。
  3. 也就是说,如果您可以在应用程序中定义一个更大的循环,您可以在一次或仅定期接收消息,您可以将任务委派给更大的循环。比如说,(psuedocode):

    while (functional_task) {
        while (msg = socket.recv()) {
            handle(msg);
        }
        do_other_stuff();
    }
    

    ...这样你就可以在每个功能循环中处理所有排队的消息,而不是只有一个专用于你的消息的循环。

    您是否可以使用回调系统在很大程度上取决于您的语言和ZMQ绑定。