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

时间:2014-01-11 23:56:17

标签: javascript node.js meteor zeromq

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

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
        })
    }
})

当然,它不起作用,因为“返回”在dotest方法结束后触发。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

可以使用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();
    }
});

我没有对此进行测试,但它应该可行。快乐的编码。