zeroMQ初体験-13.パブリッシュ/サブスクリプションモードのステップアップ


前の章では、大きなデータを転送する場合、単一のデータが大きすぎてメモリオーバーフローなどの問題を引き起こすのを防ぐために、複数の小さなデータに分割して1つずつ送信することをお勧めします.同様に、これはパブリッシュサブスクリプションモードにも適用され、ここでは新しい名詞である封筒が使用されます.
このパッケージ化されたデータ構造は、次のように見えます.
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
" % (address, contents))          subscriber.close()     context.term() if name == "main":     main()

前の章の命名制を試したい場合は、データを少し変更すればいいです.
(未完待機)