我正在尝试使用以下内容发送python字典:
import zmq
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:%s" % port
socket.send_pyobj({'hello':'world'})
并使用以下方式接收:
socket.connect ("tcp://localhost:%s" % port)
topicfilter = "1"
socket.setsockopt_string(zmq.SUBSCRIBE, topicfilter)
while True:
print(socket.recv_pyobj())
问题:
send_pyobj()
。send_string()
来实现它,所以它肯定是连接的。我做错了什么?PUB
服务器吗?从而创建一种多对多,其他应用程序可以进入流程?答案 0 :(得分:1)
- 我可以广播多个
醇>PUB
服务器吗?
易。
- 我在另一端没有收到任何东西......我做错了什么?
醇>
"1"
以及永远不会这个原因支持“没有收到任何东西”(除非它以 "1"
开头,显然从未做过,因为有效负载是由 {{组装的1}} 并且从来没有 socket.send_object( ... )
匹配字符串相似的字节[0]的位置。
- ...如何设置
的主题 醇>"1"
?
这应该使用其他方法设置,而不是猜几个字节,“匹配”对象字节字符串表示的初始部分。
最简单的方法是在发送方面“预先”控制一个值,如下所示:
send_pyobj()
使用多部分消息合成也是可能的,但在这里展示概念还需要更长的时间。
import dill as pickle
aConstantNbytesPUB_TOPIC_FILTER_PREFIX = "{UUID:0000-0000-0000-1111-2222}"
socket.send( aConstantNbytesPUB_TOPIC_FILTER_PREFIX
+ pickle.dumps( anObjectToSEND )
)
...
aMSG = socket.recv()
print( pickle.loads( aMSG[ len( aConstantNbytesPUB_TOPIC_FILTER_PREFIX ):]
)
)
和 pickle
对于对象分解/遍历/恢复功能的SER / DES策略都有限制,安全警告是众所周知,要小心。