欢迎访问宙启技术站
智能推送

使用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中实现发布-订阅模式。你可以根据实际需求进行修改和扩展。