2014-01-11 34 views
2

这里是我的服务器上的方法:Meteor.methods与ZeroMQ REQ/REP不会返回答案

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

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

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

+0

自Meteor 0.7.0.1开始,'Npm.require'只在包中可用。为了解决这个问题,'meteor-npm'包提供了'Meteor.require',它可以做同样的事情:https://atmosphere.meteor.com/package/npm – alanning

+0

另外,'meteor-npm'包提供了有用的帮助'未来'这可能是有趣的:http://meteorhacks.com/improved-async-utilities-in-meteor-npm.html – alanning