【问题标题】:PHP: Remote Function Call and returning the result?PHP:远程函数调用并返回结果?
【发布时间】:2011-11-19 14:35:51
【问题描述】:

我不是 PHP 专家。我想知道如何在 2 个 Web 服务器之间进行通信。为了清除,(从第一个服务器)在远程服务器上运行一个功能(查询)。并将结果返回给第一台服务器。

其实主题是:
Web Server (1) ----> Web Server (2) --------------- > Database Server
Web Server (1) Web Server (2) Database Server

Query Function() 将仅位于Web Server (2)。然后我需要从Web Server (1) 远程运行query function()

它叫什么?有可能吗?

【问题讨论】:

  • 你看过these questions吗?
  • RPC?你是说这个案例是关于 RPC 的吗?
  • RPC 代表 Remote Procedure Call,它似乎是您想要做的。它是一个通用协议(或概念)。变体有 RMI (Java)、XML-RPC、JSON-RPC.... 有很多可供选择。你甚至可以创建自己的。但这并不意味着这是适合您情况的最佳方式。 Maybe REST would be better.

标签: php


【解决方案1】:

是的。

我能想到的一个好方法是通过 URL 向第二台服务器发送请求。在 GET(或 POST)参数中,指定您要调用的方法,以及(出于安全考虑)某种随时间变化的散列。里面的哈希是为了确保没有第三方可以在第二台服务器上任意运行函数。

要发送请求,您可以使用 cURL:

function get_url($request_url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $request_url);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $response = curl_exec($ch);
  curl_close($ch);

  return $response;
}

这会发送一个 GET 请求。然后你可以使用:

$request_url = 'http://second-server-address/listening_page.php?function=somefunction&securityhash=HASH';
$response = get_url($request_url);

在您的第二台服务器上,设置listening_page.php(当然可以使用您喜欢的任何文件名)来检查 GET 请求并验证请求的完整性(即哈希、正确和有效的参数)。

【讨论】:

  • 哇!这可以简单地做到吗?所以我可以直接调用任何函数()并获得返回,就像在同一个本地函数中一样简单......?
  • 是的。您需要“公开”您想要调用的函数。 (即服务器 2 获取 GET 请求,然后 执行请求的函数,然后将响应传递回服务器 1,因此服务器 1 不是 直接 调用远程函数但它有类似的效果)。
  • 我已经测试过了,它可以工作,伙计:D 如此简单。这是这些的正确解决方案吗?我的意思是,其他人说要使用 REST API、SOAP 等。为什么要......
  • 您实现的本质上是一个 API。服务器 1 正在从服务器 2 的 API 请求信息。REST 和 SOAP 是传递数据的方式。他们实现了某些请求数据的约定,并以有意义且一致的方式构造其返回数据。如果您要从服务器 2 请求大量数据,您应该考虑更多地考虑您的 API。有很多关于此类任务的资源(Google 'building an api' 或类似的)。
  • 啊,我现在明白了:) REST 和 SOAP 更适合复杂和大量的数据传输。好吧。我的情况会很好,因为您可能很少输入和返回数据。但最后一个问题(请)。多负载安全吗?我的意思是,如果有多个并发用户调用此 1 个文件(服务器 2 API 文件),我可以使用您的方式吗?
【解决方案2】:

您可以使用 API 来实现。在第二台服务器上创建一个页面,该页面接受变量并使用这些变量与服务器通信(取决于您的需要)。该页面的标准回复应该是 JSON 或 XML。然后通过请求该文件并从第二个服务器获取回复来从服务器 1 读取该文件。

*注意如果是私有文件,请确保使用身份验证方法来防止用户访问该文件

【讨论】:

  • 你说的是 REST API?
  • 是的,但这取决于用户,REST API 很好,但如果他愿意,他当然可以使用纯文本作为回复。
  • 兄弟们抱歉打断你们的谈话。但是,由于我是 PHP 新手,PHP 可以直接接收 JSON 或 XML 结果吗?我的意思是,JSON 或 AJAX 结果返回到 Javascript 并打印在 HTML 元素上。 (据我所知,对此知之甚少。)
  • @4lvin:JSON 和 XML 只是一种数据格式。 PHP 有 json_encodejson_decode 来创建和解析 JSON。
【解决方案3】:

您的目标绝对是可能的。您需要设置某种 api 以便服务器 1 向服务器 2 发出请求。

我建议你阅读 SOAP 和 REST api

http://www.netmagazine.com/tutorials/make-your-own-soap-api

通常你会使用 CURL 之类的东西从服务器 1 联系服务器 2。

Google curl,您应该很快就会明白。

给你一个完整的解决方案并不容易,所以我希望这个朝着正确方向的推动会有所帮助。

【讨论】:

  • 感谢您对使用 SOAP 和 REST API 的建议。但是,亚历克斯的方式很简单而且很有效。那么您能否解释一下他的解决方案和 SOAP/REST API 之间的区别?谢谢:)
  • 按照上面的建议使用 http get 是非常好的解决方案,但构建 API 最终会提供更好的功能、安全性等。如果您只是查询结果,那么使用 get 快速简单。例如,如果您想对用户进行身份验证、发布要插入数据库的数据等,那么公开开放的获取可能并不理想。
猜你喜欢
  • 2019-03-29
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多