node python 后端_使用zeromq.js从nodejs应用程序与python后端进行通信

本文介绍了如何使用zeromq.js库在Node.js应用程序与Python后端之间建立通信。问题在于,当前实现仅能处理一次请求,而无法处理后续请求,因为REQ模式的ZeroMQ要求在发送新请求之前接收并处理REP节点的回复。解决方案是确保在Node.js代码中正确处理REQ/REP模式,确保在发送新请求之前接收并处理所有响应。
摘要由CSDN通过智能技术生成

使用zeromq.js从nodejs应用程序与python后端进行通信

我有一个python程序,它将接受一个ZeroMQ REQ请求者,并根据给定的代码提供一些function。

所以如果一个客户端发送一个代码02 ,python会返回一个内存统计信息, 03一个CPU统计信息等等。

客户端使用nodejs和zeromq.js创build,以便与后端进行通信。 我不确定从前端发送多个消息的最佳方式是什么,因为我会每秒发送多个不同代码的消息。

我现在所拥有的是类似于这样的东西:

module.exports = function(app) { var zmq = require('zeromq') , sock = zmq.socket('req'); var con_string = '' app.post('/connect', function(req, res) { protocol = 'tcp'; address = req.body.address; port = req.body.port; con_string = protocol + '://' + address + ':' + port; sock.connect(con_string); res.send('OK'); }); app.get('/workers', function(req, res) { sock.connect(con_string); sock.send(['client', 'echo', '02']); }); };

通过调用/workers函数,我可以看到第一个请求到达我的后端,但是除非我重新启动整个nodejs应用程序,否则不会有更多的后续请求到达。

为什么会发生这种情况,并且我还想发送很多消息,是否有更好的方法来构build我的nodejs应用程序,因为我在ZeroMQ指南中没有看到类似的例子。

为什么发生这种情况?

ZeroMQ在每个预定义的可扩展通信原型中使用分布式参与者模型来处理多方行为。

REQ只是这种多方分布行为的一部分。

相反的,对称的主要和必要的部分是REP节点。

这个分布式行为游戏(称为REQ/REP )的完整图像是这样的:

REQ问,

REP回复(是的,首先必须接收并确实阅读该消息然后发送答案),

REQ只能在从REP得到.recv() – .recv() un-loaded)这样的答案之后,去再次询问REP获得另一个答复…

这意味着,你的代码必须在内部与之协调并协调它的本地行为,以符合这种分布式计算行为游戏。

忽略这些硬连线的规则意味着一个问题 – 现在看来,你的REQ side代码只是在它自锁的FSA状态(想发送下一个消息)内部,它简单地忘了也忘记了.recv()第一个和后来的答案,在REQ的第一个.send()之后已经(或将要)从REP .send() ,因此REQ将永远不能再次(直到重置,如上所述)发送.send()任何“下一个” – 消息了REP部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值