让Python和Meteor沟通的最佳方法

14 投票
2 回答
7630 浏览
提问于 2025-04-18 02:20

我想用 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中已经完全实现。

当你向数据库写入数据时,可以使用常见的observeobserveChanges操作,让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();
  },

});

撰写回答