我想在meteor
(版本0.8)中构建一个调用python
脚本的项目,该脚本又将一些数据发送回去meteor
.我不确定目前这样做的最佳做法是什么.
DDP看起来不错:
"客户端可以用来通过它的DDP协议与Meteor通信,来自Meteor堆栈外部." 但python
实现看起来未完成:python-ddp-client
我想我也可以直接写mongodb
,python
但听起来不是最好的主意:
Python可以写入数据库并且Meteor会被动地更新
当流星运行时,我如何从另一个客户端访问Meteor的mongodb?
我错过了什么吗?有一个更好的方法吗?
如果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(); }, });
您链接的其他问题已经过时(一个差不多是两年).
如果你不需要调用服务器方法,你应该直接从python写入MongoDB.实际上,这就是多个Meteor服务器(负载均衡同一个应用程序)之间相互通信的方式.这是通过让Meteor服务器拖尾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/