【问题标题】:zmq / How to send response to different clients?zmq / 如何向不同的客户端发送响应?
【发布时间】:2018-01-31 18:56:31
【问题描述】:

我正在尝试用 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]]})

有没有人知道一种方法,让每个客户端都能看到其他客户端的消息?

【问题讨论】:

    标签: python server client zeromq pyzmq


    【解决方案1】:

    要将消息发送给您使用的每个客户端,请使用 zmq.PUB/zmq.SUB

    如果您想保持请求回复模式,您需要为 pubsub 打开另一个套接字。

    服务器将绑定 zmq.PUB 套接字并在其上发送消息。 客户端将连接一个 zmq.SUB 套接字然后订阅所有

    socket.setsockopt(zmq.SUBSCRIBE, "")
    

    您还可以进一步利用订阅,让每个客户只订阅它感兴趣的对话。

    【讨论】:

      猜你喜欢
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      相关资源
      最近更新 更多