python zmq的push和pub通讯
时间: 2023-10-04 09:05:52 浏览: 188
zmq的push和pub通讯方式如下:
1. Push- Pull 模式
Push- Pull 模式是一种简单的分布式消息传递模式,其中一个进程将消息推送给另一个进程。在这种模式下,一方只能发出消息,而另一方只能接收消息。
示例代码:
```
# Push
import zmq
context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.bind("tcp://*:5555")
# 发送消息
for i in range(5):
message = "Message %s" % i
socket.send(message.encode("utf-8"))
# Pull
import zmq
context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.connect("tcp://localhost:5555")
# 接收消息
while True:
message = socket.recv()
print("Received message: %s" % message.decode("utf-8"))
```
2. Pub- Sub 模式
Pub- Sub 模式是一种发布- 订阅模式,其中一个进程可以发布消息,而其他进程可以订阅并接收这些消息。在这种模式下,发布者(pub)不知道谁将接收消息,而订阅者(sub)也不知道消息来自哪里。
示例代码:
```
# Pub
import zmq
import time
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5555")
# 发送消息
for i in range(5):
topic = "Topic %s" % (i % 3)
message = "Message %s" % i
socket.send_multipart([topic.encode("utf-8"), message.encode("utf-8")])
time.sleep(1)
# Sub
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5555")
# 订阅消息
socket.setsockopt(zmq.SUBSCRIBE, b"Topic 1")
# 接收消息
while True:
[topic, message] = socket.recv_multipart()
print("Received message: %s, topic: %s" % (message.decode("utf-8"), topic.decode("utf-8")))
```
在以上代码中,订阅者只订阅了“Topic 1”的消息,所以只会收到这个主题的消息。
阅读全文