gpt4 book ai didi

node.js - 从 zmq 套接字返回值

转载 作者:太空宇宙 更新时间:2023-11-03 22:02:57 24 4
gpt4 key购买 nike

我正在使用 Socket.IO 让客户端网页从我的 Node.JS 服务器动态获取数据。在服务器端,我使用 Zeromq 套接字库将请求转发到 Python 后端(REQ/REP 结构,请参阅 zguide 中的 rrclient.js 示例)。

但是,由于我的服务器充当 socket.io 服务器,因此我必须按如下方式包装我的响应,以便将其发送回特定客户端:

socket.on('app_request',function(appRequest){
//route this request to the backend.
var results = fetch_data(appRequest);
//return it to the client
socket.emit('app_results',results);
});

因此 fetch_data 函数使用 zmq 套接字 (socket.send) 将请求推送到服务器。

但是Node ZMQ套接字使用socket.on('message',function(){});响应请求监听器,实际上不返回任何内容。

如何使用 socket.on('message',function(){});将值返回给发起 socket.send() 请求的特定函数?

换句话来说,如何获取客户端的socket.io请求,让Node.JS使用ZMQ从python后端获取相关数据,然后将其返回给socket.io客户端? (当然以非阻塞方式)

最佳答案

我做过类似的事情,你会想像这样重新做;

socket.on('app_request',function(appRequest){
//route this request to the backend.
fetch_data(appRequest, function(err, results) {
socket.emit('app_results',results);
});
});

zmq 是非阻塞的,因此在将响应发送到 socket.io 之前不会收到响应,使用此方法,您可以调整 fetch_data 方法来存储回调,直到返回响应,然后触发它。

仅用于灵感的粗略 fetch_data 未经测试;

var zmq = require('zmq'),
req = zmq.socket('req'),
count = 0,
jobs = {};


req.on('message', function(response) {
var args = JSON.parse(response),
reply = args[0],
id = args[i];

if (id && jobs[id]) {
jobs[id].apply(null, Array.isArray(reply) ? reply : [reply]);

delete jobs[id];
}
}

function fetch_data(appRequest, callback) {
var data = JSON.stringify([appRequest, count]);

jobs[count] = callback;

req.send(data);

++count;
}

然后在另一端解析 json 并保留 id 并将其与响应一起发送回来。

关于node.js - 从 zmq 套接字返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12544612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com