让Python和Meteor沟通的最佳方法
我想用 meteor
(版本0.8)来做一个项目,这个项目需要调用一个 python
脚本,然后这个脚本会把一些数据返回给 meteor
。不过我现在不太确定怎么做才是最好的方法。
DDP看起来不错:
“可以用来通过DDP协议与Meteor进行通信的客户端,能够在Meteor的技术栈之外使用。”但是 python
的实现看起来还没完成:python-ddp-client
我想我也可以直接从 python
写入 mongodb
,但这听起来不是个好主意:
我是不是漏掉了什么?有没有更好的方法呢?
2 个回答
9
你提到的其他问题都很过时了(有一个差不多快两年了)。
如果你不需要调用服务器的方法,直接从Python写入MongoDB就可以了。实际上,这也是多个Meteor服务器(为了平衡负载而运行同一个应用)之间互相沟通的方式。Meteor服务器通过监控MongoDB的操作日志,并立即处理任何数据库操作。
这个功能在Meteor版本0.7.2中已经完全实现。
当你向数据库写入数据时,可以使用常见的observe
或observeChanges
操作,让Meteor服务器执行一些任务。
另一种进行远程过程调用(RPC)的方法是使用消息总线,比如ZeroMQ。我就是用这个来从Meteor调用Python中的机器学习算法。这支持在不同机器上的Python进程、负载均衡等等。想了解如何实现,可以查看以下链接:
http://ianhinsdale.com/code/2013/12/08/communicating-between-nodejs-and-python/
13
如果你的Python脚本和Node.js应用在同一台服务器上,你可以像在普通的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();
},
});