0

我是新手ZeroMQ,我看过几个例子,似乎总是涉及到监听器做忙循环来接收消息,例如在pub/sub模式中。接收者需要这样做才能使用消息,

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

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

4

1 回答 1

0

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

你没有指定你的语言选择,或者你的应用程序中发生了什么。通常,您的策略将取决于应用程序的整体性质。

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

  1. 这些是示例,这是编写可以有效接收和处理消息的示例的最简单方法。
  2. ZMQ 是一个大容量工具集,通常当您使用它时,接收消息对您来说是一项高优先级任务,因此将整个线程专用于接收这些消息可能是一个好主意。

也就是说,如果您可以在应用程序中定义一些更大的循环,您可以在此期间接收一次或仅定期接收消息,您可以将任务委托给那个更大的循环。说,像(伪代码):

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

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

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

于 2015-05-18T15:39:59.523 回答