zmq / 如何向不同的客户端发送响应?
zmq / How to send response to different clients?
我正在尝试在 Python 中使用 zmq 构建一个聊天机器人。
我已经将不同的客户端连接到服务器,当客户端发送消息时,消息会打印在他的终端和服务器的终端上,但不会打印在其他客户端的终端上。
我只找到了回应当前客户的方法,而不是同时回应所有人。
我所有的聊天客户端都是这样的,只是名字不同:
import zmq
context = zmq.Context()
# Socket to talk to server
print("Connecting to chatbot...")
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")
name = "Max"
while True:
message = input("Message: ")
socket.send_pyobj({1:[name, message]})
# Get the reply.
message2 = socket.recv_pyobj()
print("%s: %s" % (message2.get(1)[0], message2.get(1)[1]))
我的服务器是这样的:
import time
import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")
while True:
# Wait for next request from client
message = socket.recv_pyobj()
print("%s: %s" % (message.get(1)[0], message.get(1)[1]))
time.sleep(1)
# Send reply back to client
socket.send_pyobj({1:[message.get(1)[0], message.get(1)[1]]})
有没有人知道一种方法,让每个客户端也能看到所有其他客户端的消息?
要将消息发送到您使用的每个客户端,请使用 zmq。PUB/zmq.SUB
如果您想保留请求回复模式,您需要为 pubsub 打开另一个套接字。
服务器将绑定 zmq.PUB 套接字并在其上发送消息。
客户端将连接一个 zmq.SUB 套接字然后订阅所有
socket.setsockopt(zmq.SUBSCRIBE, "")
您还可以进一步利用订阅并允许每个客户端只订阅它感兴趣的对话。
我正在尝试在 Python 中使用 zmq 构建一个聊天机器人。 我已经将不同的客户端连接到服务器,当客户端发送消息时,消息会打印在他的终端和服务器的终端上,但不会打印在其他客户端的终端上。
我只找到了回应当前客户的方法,而不是同时回应所有人。
我所有的聊天客户端都是这样的,只是名字不同:
import zmq
context = zmq.Context()
# Socket to talk to server
print("Connecting to chatbot...")
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")
name = "Max"
while True:
message = input("Message: ")
socket.send_pyobj({1:[name, message]})
# Get the reply.
message2 = socket.recv_pyobj()
print("%s: %s" % (message2.get(1)[0], message2.get(1)[1]))
我的服务器是这样的:
import time
import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")
while True:
# Wait for next request from client
message = socket.recv_pyobj()
print("%s: %s" % (message.get(1)[0], message.get(1)[1]))
time.sleep(1)
# Send reply back to client
socket.send_pyobj({1:[message.get(1)[0], message.get(1)[1]]})
有没有人知道一种方法,让每个客户端也能看到所有其他客户端的消息?
要将消息发送到您使用的每个客户端,请使用 zmq。PUB/zmq.SUB
如果您想保留请求回复模式,您需要为 pubsub 打开另一个套接字。
服务器将绑定 zmq.PUB 套接字并在其上发送消息。 客户端将连接一个 zmq.SUB 套接字然后订阅所有
socket.setsockopt(zmq.SUBSCRIBE, "")
您还可以进一步利用订阅并允许每个客户端只订阅它感兴趣的对话。