2015-01-03 17 views
5

私のmeteorアプリが流星のサーバー側のコードと同じマシンにあるpythonスクリプトを呼び出す最良の方法は何ですか?私がしたいのは、流星がPythonの関数に文字列を渡して、Pythonが文字列を流星に戻すようにすることだけです。MeteorでPythonスクリプトを呼び出す

私は、mongodbをモニターして値を抽出し、計算したmongodbに書き戻すことができると考えていましたが、Pythonで関数を流星に直接呼び出すのがはるかにクリーンです。

私はDDPを初めて使用しており、python-meteor(https://github.com/hharnisc/python-meteor)で非常に遠くまで到達することはできませんでした。

ZeroRPC(http://zerorpc.dotcloud.com/)はそれを行う良い方法ですか?

ありがとうございました。

答えて

6

大きな質問です。

私はDDPとZeroRPCを使ってみましたが、PythonにもMongoに直接書き込むことさえありました。

MeteorとPythonの話をする最も簡単な方法は、Pythonスクリプトをフラスコアプリとして設定してから、APIをフラスコアプリに追加してAPIを介してPythonと話すことでした。

このセットアップは私が使用した作業を取得するには:

それをテストするには、このような基本的なものを構築することができます(Pythonスクリプトは、テキストを大文字に変換します):

from flask import Flask 
from flask.ext import restful 

app = Flask(__name__) 
api = restful.Api(app) 

class ParseText(restful.Resource): 
    def get(self, text): 
     output = text.upper() 
     return output 

api.add_resource(ParseText, '/<string:text>') 

if __name__ == '__main__': 
    app.run(debug=True) # debug=True is for testing to see if calls are working. 

その後、MeteorでHTTP.getを使用してAPIの呼び出しをテストします。

ローカルですべてを実行している場合、流星からの呼び出しは、おそらくのようなものになります。Meteor.http.get("http://127.0.0.1:5000/test");

+1

を私は流星とZeroRPCを使用しようとちょうど流星1.3およびコマンド '流星NPMを使用して、後者をインストールすることができませんでしたinstall --save zerorpc'を実行します。 Meteor 1.3は、ZeroRPCの依存関係であるlibmsgをインストールするいくつかの[issues](https://github.com/meteor/meteor/issues/5124)のノード0.10.43を使用しています。このソリューションは、ネイティブのMeteorパッケージを使用するため、はるかに簡単です。ありがとう! – forgetso

2

RestFulアプローチを使用して同様の方法を実装した経験があります。リターン応答で、関連するPythonスクリプト/関数を呼び出すに要求を処理した後、サーバーから(Flaskで)フラスコをPythonの安らかなAPIエンドポイントにHTTPリクエストを送信し、流星からobserveChangesをトリガすることによって

流星その後、ハンドルそれに応じてコールバック。

あなたが考えることができる多くの他のアプローチは、DDP、child_processなどを使用してのように、私はまた、しかし、RESTfulなアプローチは、両方(可搬性と拡張性のあるアカウントを考慮した後の前のpython-流星を使用して検討している、もちろんあります。同じマシン、または異なるマシンでさえ...あなたはあなたのアイデアを得るより多くの要求などを処理するためにあなたのサーバーを拡張することができます)。

誰もが使用するケースが異なり、RestFul appoachが私の使用例に最も適していることがわかりました。私の答えが役に立つと思って、あなたの選択肢を広げ、あなたのケースに最適なものを選んでください。がんばろう。

関連する問題