使用ZeroMQ REQ / REP的Meteor.methods永远不会返回答案

这是我在服务器上的方法:

Meteor.methods({ dotest: function (ruleid) { console.log('Do test called with argument : %s', ruleid) var socket = zmq.socket('req') socket.connect('tcp://localhost:5555') socket.send(ruleid) socket.on('message', function(data) { console.log('Reply: ' + data); return data }) } }) 

当然,这是行不通的,因为在最后的方法结束之后,“回归”就会发生。 我该如何解决这个问题?

这可以用Futures来完成!

 Meteor.methods({ dotest: function (ruleid) { var Future = Npm.require("fibers/future"); var fut = new Future(); console.log('Do test called with argument : %s', ruleid); var socket = zmq.socket('req'); socket.connect('tcp://localhost:5555'); socket.send(ruleid); socket.on('message', function(data) { console.log('Reply: ' + data); fut['return'](data); }); return fut.wait(); } }); 

我没有testing这个,但它应该工作。 快乐的编码。