使用ZMQPUB模式在Python中实现发布-订阅模式
发布时间:2023-12-24 16:56:23
在Python中,可以使用ZMQ库来实现发布-订阅模式。ZMQ是一个高效且可扩展的消息传递库,它提供了多种通信模式,包括发布-订阅模式。下面是一个使用ZMQ库实现发布-订阅模式的示例代码。
# 发布者代码
import zmq
import time
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5555")
while True:
topic = input("请输入主题: ")
message = input("请输入消息内容: ")
socket.send_string(f"{topic} {message}")
time.sleep(1)
# 订阅者代码
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:5555")
topic = input("请输入你要订阅的主题: ")
socket.setsockopt_string(zmq.SUBSCRIBE, topic)
while True:
message = socket.recv_string()
print(f"接收到主题为 {topic} 的消息: {message}")
在上面的示例中,发布者通过创建一个PUB(发布者)类型的socket来发布消息。然后,它通过bind()方法将socket绑定到tcp://*:5555地址上,这样订阅者就可以连接到这个地址来接收消息。
发布者通过不断循环来接受用户输入的主题和消息内容,并通过send_string()方法将消息发送给订阅者。注意要在发送的消息中包含主题,这样订阅者才能根据主题来订阅相应的消息。
订阅者通过创建一个SUB(订阅者)类型的socket来订阅消息。然后,它通过connect()方法连接到发布者绑定的地址。订阅者可以使用setsockopt_string()方法来指定要订阅的主题,这样它就只会接收到属于这个主题的消息。
订阅者通过不断循环来接收发布者发送的消息,并通过recv_string()方法将消息接收到并打印出来。
你可以在一个终端中运行发布者代码,并在另一个终端或多个终端中运行订阅者代码,以模拟发布-订阅模式的使用。在订阅者运行时,它将会提示你输入要订阅的主题,然后它将接收到所有属于这个主题的消息并进行打印。
以上示例展示了如何使用ZMQ库在Python中实现发布-订阅模式。你可以根据实际需求进行修改和扩展。
