我是新手ZeroMQ
,我看过几个例子,似乎总是涉及到监听器做忙循环来接收消息,例如在pub/sub
模式中。接收者需要这样做才能使用消息,
while (true)
{
var message = socket.Recv(Encoding.UTF8);
message.Dump();
}
是否有任何类型的回调机制,例如接收者只会将自己注册到套接字,并且每当有消息时都会调用它,而不是忙于循环检查消息。
取决于您的语言选择。例如,如果您使用 node.js,那么一切都是回调。
你没有指定你的语言选择,或者你的应用程序中发生了什么。通常,您的策略将取决于应用程序的整体性质。
您通常会看到一个只专注于接收消息的循环的原因有两个:
也就是说,如果您可以在应用程序中定义一些更大的循环,您可以在此期间接收一次或仅定期接收消息,您可以将任务委托给那个更大的循环。说,像(伪代码):
while (functional_task) {
while (msg = socket.recv()) {
handle(msg);
}
do_other_stuff();
}
...这样您就可以在每个功能循环中处理一次所有排队的消息,而不是让一个循环专门用于您的消息。
是否可以使用回调系统很大程度上取决于您的语言和 ZMQ 绑定。