【问题标题】:Using JavaScript for RPC (Remote Procedure Calls)使用 JavaScript 进行 RPC(远程过程调用)
【发布时间】:2012-04-17 21:44:43
【问题描述】:

从网页或 JavaScript 代码执行 RPC(远程过程调用)的最佳方式是什么?如果可能的话,我想把它保存在 JavaScript 中,这样我就可以对网页进行实时更新,而不必在 PHP 中做任何事情,以防我的服务器出现故障我仍然希望 JavaScript 来处理页面更新......甚至可能向一个在本地运行的 python shell 脚本......这对 JavaScript 是否合法?

我更喜欢让远程机器处理请求。我看到很多关于 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 示例,它向服务器发送请求并从该服务器获取一些数据?

谢谢!

【问题讨论】:

  • 我真的很想看看 100 个 JavaScript 请求的并行基准测试......一个去 PHP、Python、Ruby、Node.JS、Apache (CGI C++) 程序并查看时间需要得到所有回复......它可能有助于我们更多地了解请求模型。我还没有弄清楚如何从 javascript 获取完整的二进制请求并将其传递给 ruby​​/python 等中的本地对象。
  • 如果服务端代码是python,客户端代码是JavaScript,为什么这个标签是PHP?

标签: php javascript json xmlhttprequest rpc


【解决方案1】:

它几乎不会以这种方式工作:client.my_awesome_remote_function。 js 中没有像 php 中的 __call 这样的魔法。此外,远程调用在 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;
});

您可以轻松找到有关该调用的教程。只需谷歌“ajax教程”。 例如:http://www.w3schools.com/ajax/ajax_intro.asp(虽然 w3schools 不是最好的网站,而且在一些细节上有错误,但它仍然适合初学者)。

所有的 ajax 实现都使用现代的 XMLHttpRequest 和旧版 IE 的 ActiveX 控件。

可以同步运行这些请求,但从用户体验的角度来看被认为非常糟糕。此外,无论如何,您都需要处理回调的概念。

【讨论】:

  • 可能没有 _call 魔法,但许多 JSON-RPC 客户端库(例如 dojo)可以解析 JSON-RPC Web 服务发布的 SMD,因此您可以调用 client.my_awesome_remote_function。
  • 如果列出方法,那么当然可以生成对应的js函数。尽管如此,这也应该使用回调执行。
  • ...或“承诺”上的链式方法调用 :-) 我相信 jQuery 已经开始支持这一点。
  • 在 JavaScript 中最好使用 XMLHttpRequest。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-09-19
  • 2014-05-28
  • 2015-07-01
  • 2013-01-07
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
相关资源
最近更新 更多