我想在meteor
(版本0.8)中构建一个调用python
脚本的项目,该脚本又将一些数据发送回meteor
。我不确定目前这样做的最佳做法是什么。
DDP looks good:
"可以用来通过它的DDP协议从Meteor堆栈外部与Meteor通信的客户端。"但是python
实现看起来未完成:python-ddp-client
我想我也可以直接从mongodb
写到python
,但这听起来并不是最好的主意:
我错过了什么吗?有更好的方法吗?
答案 0 :(得分:13)
如果python脚本在同一台服务器上,你可以像在普通的Node.js应用程序中一样调用它:
var exec = Npm.require('child_process').exec;
var Fiber = Npm.require('fibers');
var Future = Npm.require('fibers/future');
Meteor.methods({
callPython: function() {
var fut = new Future();
exec('pythonScriptCommand with parameters', function (error, stdout, stderr) {
// if you want to write to Mongo in this callback
// you need to get yourself a Fiber
new Fiber(function() {
...
fut.return('Python was here');
}).run();
});
return fut.wait();
},
});
答案 1 :(得分:9)
您链接的其他问题已过时(一个差不多两年)。
如果你不需要调用服务器方法,你应该直接从python写入MongoDB。实际上,这就是多个Meteor服务器(负载均衡同一个应用程序)之间相互通信的方式。这是通过让Meteor服务器tail the Mongo oplog实现并立即合并任何数据库操作来实现的。
这在Meteor版本0.7.2中完全实现。
当您写入数据库时,您可以对集合使用典型的observe
或observeChanges
操作来让Meteor服务器执行操作。
进行RPC调用的另一种方法是使用消息总线,例如ZeroMQ。我用这个来从Meteor调用Python中的机器学习算法。这支持不同机器上的Python进程,负载平衡等。有关如何操作,请参阅以下帖子:
http://ianhinsdale.com/code/2013/12/08/communicating-between-nodejs-and-python/