与Python和Meteor交互的最佳方式是什么?

14

我希望使用Meteor(版本0.8)构建一个项目,该项目调用一个python脚本,然后将一些数据发送回Meteor。目前不确定最佳实践是什么。

DDP看起来不错
“可以通过它的DDP协议与Meteor通信的客户端,来自Meteor堆栈之外。”但是python实现看起来还没有完成:python-ddp-client

我想我也可以直接从pythonmongodb写入,但这似乎不是最好的主意:

我有遗漏吗? 有更好的方法吗?

2个回答

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();
  },

});

谢谢,这看起来非常不错。快速问题:从python直接写入Mongo是否可以?当外部进程写入数据库时,我应该注意哪些问题? - e h
你可以从任何地方向数据库写入数据,Meteor会自动捕捉到这些变化。 - Hubert OG
1
就像Andrew在下面解释的一样 :) - Hubert OG
在文件系统中,我应该把Python脚本保存在哪里? - Chet
任何地方都不要让Meteor捕捉到它。对于开发来说,这意味着要么在项目文件夹之外,要么在项目中的隐藏(.name)目录中。 - Hubert OG

9
你所提到的其他问题已经非常过时(其中有一个将近两年了)。
如果不需要调用服务器方法,你应该直接从Python向MongoDB编写代码。事实上,这是多个Meteor服务器(负载均衡同一应用程序)相互通信的方式。通过让Meteor服务器跟踪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/


谢谢Andrew。我花了很长时间才找到最新的信息。这真的很有帮助。 - e h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接