我有多个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发送方法有一个回调,如果有人可以更多地了解这个问题会很好。建议?
答案 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库最终得到更新。