我正在尝试使用Python中的zmq构建一个聊天机器人。 我已经将不同的客户端连接到服务器,当客户端发送消息时,它会打印在他的终端上,并打印在服务器的终端上,但不会打印在其他客户端的终端上。
我只找到了回应当前客户的方法,但不是同时对所有人做出回应。
我的所有聊天客户都是这样的,名字不同:
resetpwd.php
<form id='frdpwd' method ="post" action="/updatepwd.php" autocomplete="off">
<label for="Name">Name :</label>
<input type="text" id="name" name="name" disabled = "disabled" size =25 value="<?php echo $name; ?>" >
<label for="email">Email ID :</label>
<input type="email" id="email" name="email" disabled = "disabled" size =25 value="<?php echo $email; ?>" >
<input type="password" id="pwd" name="pwd" size = 25 placeholder="Your password (Required).." onkeyup='check();'>
<input type="submit" name = "resetpwdsubmit" value="Submit" >
<input type="reset" value="Reset">
</form>
updatepwd.php
<?php
if(isset($_POST["resetpwdsubmit"])){
$rname = $_POST["name"]);
$remail = strtolower($_POST["email"]);
$rpwd = $_POST["pwd"];
$rcpwd = $_POST["cpwd"];
echo "<script type='text/javascript'>alert('Check : " . $rname . "');</script>";
if($rpwd==$rcpwd && $rname!="" && $remail!="" && $rpwd!=""){
echo "<script type='text/javascript'>alert('ready to update the pwd : " . $_POST["pwd"] . "');</script>";
}
}
?>
我的服务器看起来像这样:
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]))
有人知道某种方式,每个客户都会看到其他客户的消息吗?
答案 0 :(得分:1)
要将消息发送到您使用的每个客户端,请使用zmq.PUB/zmq.SUB
如果您想保留请求回复模式,则需要为pubsub打开另一个套接字。
服务器将绑定zmq.PUB套接字并在其上发送消息。 客户端将连接zmq.SUB套接字,然后订阅所有
case_when
您还可以进一步利用订阅,并允许每个客户只订阅它感兴趣的对话。