【问题标题】:Asynchronous HTTP requests in PHPPHP 中的异步 HTTP 请求
【发布时间】:2009-08-06 17:18:50
【问题描述】:

是否有任何理智的方法可以在 PHP 中异步发出 HTTP 请求而不会抛出响应?即类似于 AJAX 的东西 - PHP 脚本发起请求,做它自己的事情,然后,当收到响应时,回调函数/方法或另一个脚本处理响应。

我想到了一种方法 - 为每个请求使用另一个脚本生成一个新的 php 进程 - 第二个脚本执行请求,等待响应,然后解析数据并执行它应该执行的任何操作,而原始脚本继续执行催生新进程。不过,我对这种情况下的性能存有疑虑——每次都必须创建一个新进程,这肯定会导致一些性能损失。

【问题讨论】:

    标签: php http asynchronous request curl-multi


    【解决方案1】:

    是的,根据您网站的流量,生成一个单独的 PHP 进程来运行脚本可能是毁灭性的。使用 shell_exec() 启动后台进程将输出保存到您已知的文件名会更有效,但即使这样也可能是资源密集型的。

    您还可以将请求队列存储在数据库中。一个单独的后台进程会拉取作业、执行它并保存输出,可能会在数据库中设置一个您的 Web 进程可以检查的标志。

    如果您要使用 DB 队列方法,请使用 curl_multi* 类函数一次发送所有排队的请求。这会将后台进程中每次迭代的执行时间限制为最长请求时间。

    【讨论】:

      【解决方案2】:

      V5 可能没有线程,但您可以创建利用进程内多任务处理的应用程序。

      查看以下文章:“使用 PHP V5 开发多任务应用程序”,来自 IBM 开发者工作室。你可以在这里找到它http://www.ibm.com/developerworks/web/library/os-php-multitask/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-03
        • 1970-01-01
        • 2022-11-28
        • 1970-01-01
        • 2010-09-12
        • 2021-08-23
        • 2015-10-24
        相关资源
        最近更新 更多