前面章节有介绍过当传输大数据时,建议分拆成多个小数据逐个发送,以防单条数据过大引发内存溢出等问题。同样的,这也适用于 发布订阅模式,这里用到了一个新名词:信封。
这种封装的数据结构看起来是这样的:
[img]http://github.com/imatix/zguide/raw/master/images/fig27.png[/img]
由于key的关系,不用担心出现 被分拆为多份的数据只被对应订阅方部分持有 这种尴尬的局面。
发布端:
订阅端:
如果想要尝试下上一章节的命名制,对数据做些许变动即可:
[img]http://github.com/imatix/zguide/raw/master/images/fig28.png[/img]
(未完待续)
这种封装的数据结构看起来是这样的:
[img]http://github.com/imatix/zguide/raw/master/images/fig27.png[/img]
由于key的关系,不用担心出现 被分拆为多份的数据只被对应订阅方部分持有 这种尴尬的局面。
发布端:
import time
import zmq
def main():
context = zmq.Context(1)
publisher = context.socket(zmq.PUB)
publisher.bind("tcp://*:5563")
while True:
publisher.send_multipart(["A", "We don't want to see this"])
publisher.send_multipart(["B", "We would like to see this"])
time.sleep(1)
publisher.close()
context.term()
if name == "main":
main()
订阅端:
import zmq
def main():
context = zmq.Context(1)
subscriber = context.socket(zmq.SUB)
subscriber.connect("tcp://localhost:5563")
subscriber.setsockopt(zmq.SUBSCRIBE, "B")
while True:
[address, contents] = subscriber.recv_multipart()
print("[%s] %s\n" % (address, contents))
subscriber.close()
context.term()
if name == "main":
main()
如果想要尝试下上一章节的命名制,对数据做些许变动即可:
[img]http://github.com/imatix/zguide/raw/master/images/fig28.png[/img]
(未完待续)