[英]Can Subscriber send data to Publisher in ZeroMQ
我正在使用ZeroMQ在兩個進程之間進行數據傳輸: sender.py
和receiver.py
,現在使用的通信模式是Publisher / Subscriber。 以下是我分別針對這兩個過程的代碼:
sender.py:
import zmq
context = zmq.Context()
publisher = context.socket(zmq.PUB)
# Set SNDHWM to not drop messages for slow subscribers
publisher.sndhwm = 1100000
publisher.bind("tcp://127.0.0.1:%s" % "5555")
for i in range(10000):
publisher.send(i)
receiver.py
import zmq
context = zmq.Context()
subscriber = context.socket(zmq.SUB)
subscriber.connect("tcp://127.0.0.1:%s" % "5555")
subscriber.setsockopt(zmq.SUBSCRIBE, "")
while(True):
data = subscriber.recv()
實際上,該代碼可以正常工作。 目前,我想要做的事上receiver.py
:當接收到的data > 1000
在receiver.py
,它會自動終止兩者的運行腳本receiver.py
和sender.py
。 我想知道我是否能夠做到這一點。 我真的很感謝任何建議或想法:)
基於我對ZeroMQ的短暫經驗。
簡短答案:否
長答案:您可以創建從SUB到PUB的其他逆流連接:
Node2
|--------> SUB
Node1 |<-------- PUB
PUB->|
SUB<-| Node3
|--------> SUB
|<-------- PUB
只需使用PUB到SUB可以兩種配置傳輸數據的可能性即可:
一對多(一個PUB可以與許多SUB通話)
多對一(許多PUB可以與一個SUB對話)
http://learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/patterns/pubsub.html
實際上可以做到,我不確定這是否是解決您問題的正確模式,但是無論如何:
您應該使用XSub和XPub,對於XSUB,您可以通過在套接字上調用send來發送訂閱,但是請確保為字節數組添加0x1字節前綴。 (0x0退訂)。 在您的情況下,它將是一個字節數組,設置為0x1。
在XPUB端,您需要接收所有消息並對其進行處理,如果以0x0或0x1為前綴的消息只是忽略它們,魔術就是以不同字節為前綴的消息。
從XSUB,當您想發送消息給發布者,而不是訂閱或取消訂閱時,只給它加上0x0或0x1以外的任何前綴。
因此,例如,當您收到高於1000的消息時,將消息從xsub發送到前綴為0x2的xpub。 在XPUB上,當您收到帶有2前綴的消息時,請終止套接字或您想要執行的任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.