Django zmq无法接收消息

Django zmq无法接收消息,django,sockets,encoding,zeromq,pyzmq,Django,Sockets,Encoding,Zeromq,Pyzmq,我现在处理这个问题有几天了,但我确信解决方案必须相对简单 我的应用程序的结构基于来自的“图17-请求-回复代理”。 更详细地说,与django一起运行的我的前端,看起来像: context,client\u socket,port=create\u client\u socket() 客户端\u套接字。连接(“tcp://localhost:%s" % 5559) to_send=list()#这是将其发送给代理的请求 发送=设置请求是什么 #发送请求 client_socket.send(js

我现在处理这个问题有几天了,但我确信解决方案必须相对简单

我的应用程序的结构基于来自的“图17-请求-回复代理”。
更详细地说,与django一起运行的我的前端,看起来像:

context,client\u socket,port=create\u client\u socket()
客户端\u套接字。连接(“tcp://localhost:%s" % 5559)
to_send=list()#这是将其发送给代理的请求
发送=设置请求是什么
#发送请求
client_socket.send(json.dumps(to_send.encode('utf-8'))#发送消息
#等待回应
结果=client_socket.recv(1024).decode()#接收响应
client_socket.close()
上下文。术语()
如果结果是:
#处理从代理收到的结果
...............
返回呈现(请求'front_app/my.html',{'records':results})

我的经纪人看起来是这样的:

context=zmq.context()
前端=context.socket(zmq.ROUTER)
frontend.bind(“tcp://*:5559”)#客户端用于通信的端口
后端\u套接字=列表()
对于范围内的i(服务器节点数):#目前有2个服务器节点
端口=范围(55505558,2)[i]
后端=context.socket(zmq.DEALER)
bind(“tcp://*:{}”.format(port))
后端\u sockets.append(后端)
#初始化轮询集
poller=zmq.poller()
轮询器寄存器(前端,zmq.POLLIN)
#轮询器寄存器(后端1,zmq.POLLIN)
#轮询器寄存器(后端2,zmq.POLLIN)
对于后端插槽中的后端插槽:
轮询器寄存器(背面,zmq.POLLIN)
#在套接字之间切换消息
尽管如此:
socks=dict(poller.poll())
如果socks.get(前端)=zmq.POLLIN:
原始消息=frontend.recv_multipart()
消息=无
尝试:
message=json.loads(str(原始消息[2])[2:-1])
除了JSONDecodeError作为e:
尝试:
message=json.load(str(原始消息[2])[2:-1].replace('ObjectId(\\\\\”,'').replace('\\\\”,'')
例外情况除外,如e:
打印(e)
action=消息[0]['action']#列表的第一项应始终是操作代码
#为客户端获取记录
如果操作==“数据提取”:
user\u email=消息[1]。获取('user\u email')
如果用户发送电子邮件:
#将请求发送到所有后端节点
对于后端_套接字中的bs:
发送多部分(原始消息)
#等待来自所有后端节点的结果
来自\u套接字的结果=列表()
返回值=0
返回时

最后,后端代码(在多个线程中运行,当前为2个)如下所示:

context=zmq.context()
socket=context.socket(zmq.REP)
插座。连接(“tcp://localhost:{}.格式(端口)#5550和5552
尽管如此:
打印(“…”)
#接收数据流。它不接受大于8096字节的数据包
原始数据=socket.recv()
打印(“|调试|服务器节点{}接收:{}”。格式(节点名称,原始数据))
如果len(原始数据)=0:
持续
尝试:
data=json.load(原始数据)#转换为列表的数据
例外情况除外,如e:
打印(e)
action=data.pop(0)['action']#列表的第一项应始终是操作代码
如果操作==“数据提取”:
对于数据中的请求:
--创建将被发回的结果的代码
如果len(拥有_记录)!=0:
to_send=str(拥有的_记录).encode()
socket.send(to_send.encode())
其他:
socket.send(b'NONE')
长话短说,我的问题是,当代理试图发送消息时,前端没有收到任何消息。当我在代码的“通常等待来自后端的消息”部分从后端向代理发送消息时,它工作正常

我猜这与信息的格式有关,但我尝试了很多方法,但都没有效果

救命啊