【问题标题】:Transfer incoming php request to another server将传入的 php 请求转移到另一台服务器
【发布时间】:2015-08-04 01:14:27
【问题描述】:

我有两台服务器从我的应用程序运行 api。每个请求都到达我的主服务器,我们称之为服务器 A。一些需要更多处理的文件我希望它发送到另一台服务器,服务器 B。

我通过执行 curl_url 调用另一台服务器,但服务器 A 上的 PHP 文件保持活动状态并等待服务器 B 完成,这超过 30 秒。

我的问题是:

1-。有没有其他方法可以将该进程重定向到服务器 B。我尝试使用舱口盖,但因为它上传文件,我只能传递 POST 数据而不能传递 FILES

2-。有没有办法让服务器 A 上的 PHP 文件进入休眠状态,直到服务器 B 完成并给出响应?

我不能在服务器 A 上执行此过程,因为需要分配资源,我们希望 API 响应更快,如果很多人调用需要分配时间来完成的过程,我们的服务器 A 将过于拥挤,在最坏的情况下,服务器 B 工作,只有那个进程会受到影响。

最好的,

【问题讨论】:

    标签: php multithreading


    【解决方案1】:

    您是否考虑过将它从 PHP 中移出?

    如果您使用的是 Apache,您可以使用 mod_proxy 完成此操作,配置如下:

    ProxyPass /slow_script.php http://otherserver.com/slow_script.php
    

    【讨论】:

    • 嗨 @teacurran 你是什么意思把它从 PHP 中移出?关于 ProxyPass 将在服务器 A 上使用 CPU 进程,还是仅在服务器 B 上使用 CPU 进程,或两者兼而有之?
    • 除非您将请求重定向到另一个域“serverb.yourdoain.com”,否则您将通过服务器 A 将请求代理到服务器 B。因此它总是会消耗两台服务器上的资源,直到完成. ProxyPass 只是一个比使用 curl_url 更轻的代理。最好的方法是让服务器 A 确认请求并将艰苦的工作放入队列中,然后让服务器 B 检查队列中的工作。尽管我无法详细说明,但不知道您要做什么。
    • 嗨,terrence,我想要完成的是,当我的用户调用创建视频的 API 上的特定函数时,大约需要 30 秒才能完成。如果很多人最终调用相同的函数,服务器会非常慢。这就是为什么我想将此特定功能移动到另一台服务器的原因,在最坏的情况下,该功能会很慢,而 API 的其余部分将可以正常工作。我需要在完成后向从 API 请求视频的用户给出答案,这就是为什么我不能使用后台策略
    • 如果很多用户可以让服务器 A 变慢,他们最终也会让服务器 B 变慢。防止这种情况并能够扩展的唯一方法是对视频创建进行排队。通常这是通过告诉用户它已排队来完成的,然后您可以每隔几秒执行一次 ajax 请求或其他操作,以查看视频是否已准备好。如果您的流量非常高,这使您可以让编码花费更长的时间或 2、3、....、10 个服务器 b。
    • 是的,但是 API 有时会在移动应用程序中使用,所以我无法创建请求来检查视频是否完成。我知道最终服务器 B 会很慢,但服务器 B 只提供一项服务,在工作情况下,只有视频创建会很慢,但 API 的其余部分会正常工作
    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 2012-06-07
    • 2012-04-23
    • 2012-12-27
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多