python - Python ZMQ响应者未收到消息
问题描述
我正在尝试一个简单的zmq
脚本,但不知何故响应者没有收到第一条消息。
响应程序如下所示:
def main():
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.connect("tcp://localhost:{}".format(5560))
print("connected ...")
while True:
# Wait for next request from client
message = socket.recv_pyobj()
#print (message)
print(message)
if __name__ == '__main__':
main()
我正在从另一个进程发送带有以下代码的请求:
def main():
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:{}".format(5560))
print("sending object")
socket.send_pyobj("ok")
print("done")
if __name__ == '__main__':
main()
有人知道为什么它没有到达吗?
解决方案
您必须.bind()
在代码片段中添加 IP 地址,REP
而不是.connect()
. 在 REP/REQ模式中有请求和响应因子,因此您可以在响应者代码中抛出反馈。因此,您的代码将如下所示:
响应者:
import zmq
def main():
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://127.0.0.1:5560")
while True:
message = socket.recv_pyobj()
print(message)
socket.send_string('Your message received.')
if __name__ == '__main__':
main()
请求代码片段:
import zmq
def main():
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5560")
print("sending object")
socket.send_pyobj("ok")
message = socket.recv()
print(message)
if __name__ == '__main__':
main()
输出(请求):
sending object
b'Your message received.'
出局(代表):
ok
[注意]:
如果你想发送一个没有任何响应的简单字符串,使用 PUSH/PULL 或 SUB/PUB 模式比使用 REP/REQ 更合适,你也可以在请求部分使用而
socket.send_string('ok')
不是在响应者中。socket.send_pyobj('ok')
socket.recv()
socket.recv_pyobj()
请注意,
.bind()
以防万一,您不应使用localhost
字符串Relevant Post。
推荐阅读
- c# - 我希望我生成的玩家能够相互重叠(没有图层)
- php - 如何根据会话用户数据中存储的用户名选择表?
- r - ShinyApp:使用选定的输入对分类变量的某些级别进行子集化,并将其用作在服务器中绘图的输入
- python-3.x - 在 Python 3 中使用行进立方体进行点云三角测量
- javascript - AngularJS $scope 对象是什么类型的设计模式?
- discord - Discord bot 自动关闭,并且在一天中的某些部分执行非常缓慢
- javascript - elFinder 文件管理器防止双击时弹出图像
- swift - Swift Mini-Max Sum 一个测试用例失败 - HackerRank
- java - Spring Boot,多对一关系获取 LAZY 或 EAGER
- python - How to save the output of a while loop within a for loop in Python?