2012-04-04 36 views
1

從網頁或JavaScript代碼執行RPC(遠程過程調用)的最佳方式是什麼?如果可能的話,我想保留在JavaScript中,這樣我就可以對網頁進行實時更新,而無需在PHP中執行任何操作,以防服務器出現故障時我仍然希望JavaScript處理頁面更新......甚至可能會向一個在本地運行的python shell腳本...這是JavaScript合法嗎?使用JavaScript進行RPC(遠程過程調用)

我更喜歡讓遠程機器處理請求。然而,我看到很多關於XMLRPC或JSONRPC如何做到這一點的討論,我還沒有看到任何好的例子。我想微軟建議使用他們的XMLhttprequest,但是,我還沒有看到任何不使用ActiveX調用或需要Internet Explorer的特殊代碼......我只是想要一些簡單的方式將命令傳遞給一些python/ruby​​/C++代碼來自網頁。

Python的服務器代碼(如等待一個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 2012-11-30 03:45:40

回答

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

您可以輕鬆找到有關該調用的教程。只是谷歌「阿賈克斯教程」。 例如:http://www.w3schools.com/ajax/ajax_intro.asp(儘管w3schools不是最好的網站,並且在某些細節上有錯誤,但它對初學者仍然有好處)。

所有的ajax實現既使用現代XMLHttpRequest,也使用ActiveX控件來處理較舊的IE。

可以同步運行這些請求,但從用戶體驗來看,它被認爲是非常糟糕的。此外,無論如何,您都需要處理回調的概念。

+0

可能沒有\ _call魔術,但許多JSON-RPC客戶端庫(例如dojo )可以解析由JSON-RPC web服務發佈的SMD,因此您只能調用client.my_awesome_remote_function。 – 2012-04-04 08:06:38

+0

如果列出了方法,那麼當然可以生成相應的js函數。儘管如此,這應該與回調執行。 – kirilloid 2012-04-04 08:13:29

+0

...或「承諾」上的鏈式方法調用:-)我相信jQuery已經開始支持這一點。 – 2012-04-04 08:15:09