zmq 订阅者是否知道跳过多部分消息的过滤主题的后续部分?

问题描述 投票:0回答:1

假设我有一个

publisher_socket
和一个
subscriber_socket
,是在两个不同的进程中创建的。
publisher_socket
发布一条由两部分组成的消息,如下面的伪代码所示。

publisher_socket.send("huge_blob", ZMQ_SNDMORE)
publisher_socket.send([ 1GB buffer of data ])

假设

subscriber_socket
未设置其消息过滤器来订阅主题“huge_blob”。关联的后台线程是否知道跳过消息第二部分的摄取?或者,当后台线程从网络复制消息的第二部分时,我是否会看到订阅者的内存使用量飙升至 1GB,即使它永远不会被使用?

zeromq
1个回答
0
投票

有两条规则需要考虑。

  • 您添加到
    ZMQ_SUB
    的订阅仅检查/过滤 zmq 多部分消息的 第一帧
  • zmq 多部分消息是原子的(您将收到所有部分或没有部分),因此如果第一帧通过您的订阅过滤器,您将获得所有帧。

在您的示例中,您的订阅者将收到多部分消息的两个帧。

publisher_socket.send("huge_blob", ZMQ_SNDMORE)
publisher_socket.send([ 1GB buffer of data ])

或者,如果您将帧作为单独的消息发送(没有 ZMQ_SNDMORE),您的订阅者将仅收到第一条消息

publisher_socket.send("huge_blob")
publisher_socket.send([ 1GB buffer of data ])
© www.soinside.com 2019 - 2024. All rights reserved.