假设我有一个
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,即使它永远不会被使用?
有两条规则需要考虑。
ZMQ_SUB
的订阅仅检查/过滤 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 ])