Chapter 2 Sockets and Patterns【选译,哈哈】 Part 3 Messags Partterns

Handling Multiple Sockets

如果我们想同时从多个端点读取数据,该怎么办? 最简单的方法是将一个套接字连接到所有端点,并让ZeroMQ为我们完成扇入操作。如果远程端点处于相同的模式,这是合法的,但将PULL套接字连接到PUB端点则是错误的。

要想立即从多个套接字中读取数据,可以使用zmq_poll()。一个更好的方法可能是将zmq_poll()封装在一个框架中,使其成为一个出色的事件驱动的反应器,但这比我们想在这里讨论的工作多得多。

Multipart Messages

What we’ll learn now is simply how to blindly and safely read and write multipart messages in any application (such as a proxy) that needs to forward messages without inspecting them.

我们现在要学习的只是在需要转发消息而不检查消息的任何应用程序(如代理)中,如何盲目且安全地读写多部分消息。

当您处理多部分消息时,每个部分都是一个zmq_msg。例如,如果您正在发送一个包含五个部分的消息,那么您必须构造、发送和销毁五个zmq_msg。您可以提前完成这一操作(并将zmq_msg存储在数组或其他结构中),或者在发送时逐个执行。

关于multipart messages需要了解的一些事情:

当您发送一个多部分消息时,当您发送最终部分时,第一部分(以及后面的所有部分)实际上只在线路上发送。

如果您正在使用zmq_poll(),那么当您收到消息的第一部分时,其余的部分也已经到达。

您将收到消息的所有部分,或者根本没有。

消息的每个部分都是一个单独的zmq_msg。

无论是否检查more属性,您都将收到消息的所有部分。

在发送时,ZeroMQ将消息帧在内存中排队,直到最后一个消息帧被接收,然后将它们全部发送出去。

没有办法取消部分发送的消息,除非关闭套接字。

原文地址:https://www.cnblogs.com/usen521/p/15310915.html