让python和流星说话的最好方法

时间:2014-04-11 11:33:23

标签: python meteor

我想在meteor(版本0.8)中构建一个调用python脚本的项目,该脚本又将一些数据发送回meteor。我不确定目前这样做的最佳做法是什么。

DDP looks good
"可以用来通过它的DDP协议从Meteor堆栈外部与Meteor通信的客户端。"但是python实现看起来未完成:python-ddp-client

我想我也可以直接从mongodb写到python,但这听起来并不是最好的主意:

我错过了什么吗?有更好的方法吗?

2 个答案:

答案 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中完全实现。

当您写入数据库时​​,您可以对集合使用典型的observeobserveChanges操作来让Meteor服务器执行操作。

进行RPC调用的另一种方法是使用消息总线,例如ZeroMQ。我用这个来从Meteor调用Python中的机器学习算法。这支持不同机器上的Python进程,负载平衡等。有关如何操作,请参阅以下帖子:

  

http://ianhinsdale.com/code/2013/12/08/communicating-between-nodejs-and-python/