2012-04-04 6 views
1

ウェブページまたはJavaScriptコードからRPC(リモートプロシージャコール)を実行する最善の方法はありますか?できるだけJavaScriptに保存して、私のサーバがダウンした場合でもPHPで何もしなくてもウェブページをライブアップデートできるようにしたいのですが、私はまだJavaScriptにページ更新を処理させたいと思っています。ローカルで実行されているpythonシェルスクリプト...これはJavaScriptから合法ですか?RPC(リモートプロシージャコール)用のJavaScriptの使用

私は、要求を処理するリモートマシンを持つ方が好きです。 XMLRPCやJSONRPCがこれをどのように行うことができるかについて多くの話がありますが、私は良い例は見ていません。私はMicrosoftがXMLhttprequestを使用することを提案していると思いますが、ActiveX呼び出しを使用しないか、Internet Explorer用の特別なコードが必要なものは見ていません... Python/ruby​​/C++にコマンドを渡す簡単な方法がほしいですウェブページのコード

のPython Serverコード(RPC要求待ち):

import xmlrpclib 
from SimpleXMLRPCServer import SimpleXMLRPCServer 
def my_awesome_remote_function(str): 
    return str + "awesome" 
server = SimpleXMLRPCServer(("localhost", 8000)) 
print "Listening on port 8000..." 
server.register_function(is_even, "is_even") 
server.serve_forever() 

例JavaScriptのコード:

var client = rpc.server("http://localhost:8000/"); 
var my_local_variable = client.my_awesome_remote_function(param); 

が良いJSON/JavaScriptの例では、誰かがそれがリクエストを送信するに私を指すことができますありますそのサーバーからいくつかのデータを取得しますか?

ありがとうございます!

+0

私は本当に、100のJavaScriptリクエストのサイド・バイ・ベンチマークを見たいと思っています... PHP、Python、Ruby、Node.JS、Apache(CGI C++)プログラムに行き、すべてを取得するのにかかる時間を見てください返信が返ってくる...リクエストモデルについてもっと知るのに役立つかもしれない。私はまだjavascriptから完全なバイナリ要求を取得し、それをRuby/Pythonなどのローカルオブジェクトに渡す方法を見つけ出していません。 – htmlfarmer

答えて

1

ほとんどこの方法で動作しません。client.my_awesome_remote_function。 PHPの__callのようなjsの魔法はありません。また、リモート呼び出しは、いくつかのタスクの終了後に呼び出されるコールバック関数のアイデアを使用して、ほとんど非同期的にjsで実行されます。

var client = rpc.server("http://localhost:8000/"); 
var my_local_variable; 
client.rpc('my_awesome_remote_function', [param], function(result) { 
    my_local_variable = result; 
}); 

その呼び出しに関するチュートリアルを簡単に見つけることができます。ちょうどGoogleの "ajaxチュートリアル"。 例:http://www.w3schools.com/ajax/ajax_intro.asp(イベントはw3schoolsが最適なサイトではなく、一部の詳細でエラーがありますが、初心者の方には良いことです)。

すべてのajax実装では、最新の両方のXMLHttpRequestと古いIEのActiveXコントロールの両方を使用します。

これらの要求を同期して実行することは可能ですが、ユーザーエクスペリエンスの観点から非常に悪いとみなされます。また、とにかくコールバックの概念に対処する必要があります。

+0

\ _callという魔法はないかもしれませんが、多くのJSON-RPCクライアントライブラリ)は、JSON-RPC Webサービスによって公開されたSMDを解析できるので、client.my_awesome_remote_functionを呼び出すことができます。 –

+0

メソッドがリストされている場合、対応するjs関数を生成することはもちろん可能です。それにもかかわらず、これはコールバックで実行する必要があります。 – kirilloid

+0

...またはチェーンメソッドは '約束'を呼び出します:-)私はjQueryがそれをサポートし始めたと信じています。 –