NodeJS ZeroMQ,没有回调发送?

时间:2013-10-15 00:24:34

标签: node.js ipc cluster-computing zeromq publish-subscribe

我有多个nodejs服务器位于不同的位置,我需要创建一个IPC over tcp套接字,我正在使用ZeroMQ。我需要像异步方式那样的请求/响应或发布/订阅,并确认消息已发送,但是看到node-zeromq模块我发现所有发送方法都是同步的,并且没有办法确认通过发送的消息回调

简而言之, 我需要像socket.send(message,function(err,res){;});这样的东西 但我发现了socket.send(message)

任何人都知道如何使用ZeroMQ或任何其他方式来做到这一点我可以IPC可靠地并且肯定作为回应?

更新:我发现https://github.com/visionmedia/axon,Axon及其req / rep发送方法有一个回调,如果有人可以更多地了解这个问题会很好。建议?

2 个答案:

答案 0 :(得分:0)

您可以使用请求/回复模式而不是ZMQ的发布/订阅模式。我相信当你提出请求时,有一个回调来监听响应,而不是pub.send()......

答案 1 :(得分:0)

zeromq.node尚不支持send消息的回复回调。

现在在GitHub讨论了一个问题,人们认为这是一个合理的修改。

我遵循another question的建议,因为我真的想在更高级别使用Promise,因此需要REQ / REP机制的回调。即从'message'事件处理程序调用回调:

var socket, onRepHandler, replyCallback, send;
socket = zmq.socket('req');
onRepHandler = function (reply) {
    // HACK
    // This handler is a workaround until zeromq.node supports
    // direct callback for REQ/REP:
    // https://github.com/JustinTulloss/zeromq.node/issues/48
    if (replyCallback) {
        replyCallback(reply);
    }
    replyCallback = undefined;
};
socket.on('message', onRepHandler(msg));
socket.connect(address);

// Send method with callback
send = function (msg, repcb) {
    if (replyCallback) {
        throw new Error('Cannot send request before receiving reply of preceding request!');
    }
    replyCallback = repcb;
    socket.send(msg);
}

感觉这是一个可疑的黑客,但我希望zeromq.node库最终得到更新。