【问题标题】:Is it possible to implement a fire-and-forget web request to an Apache webserver with PHP while processing a request是否可以在处理请求时使用 PHP 实现对 Apache 网络服务器的即发即弃网络请求
【发布时间】:2018-08-21 02:19:38
【问题描述】:

我有一个 webrequest 处理实时调用(需要 100 毫秒内的处理时间),某些操作需要很长时间(250 毫秒)。我在检查是否可以在处理原始请求时触发并忘记 Web 请求?到目前为止,我已经收集到:

  1. 可以使用 php 在 php 中创建异步 http 帖子: Asynchronous PHP calls?

  2. 只要请求连接建立,Apache 就会停止处理 关闭: http://activelamp.com/blog/development/asynchronous-php-with-message-queues/

  3. 使用 php 线程 vs 消息队列(类似于 #2)

如果可能的话,请告诉我方法并指出来源。

【问题讨论】:

  • 是的,这是可能的。您可以在 linux 上通过 exec()(命令行)在命令末尾使用 > /dev/null & 之类的方式使用 curl 来分离 shell。
  • @ArtisticPhoenix 如果可以,请告诉我如何做到这一点。谢谢。
  • 我会尝试类似exec('curl http://example.com/index.php > /dev/null &') 的方法,我以前从未尝试过,但它可能会奏效。这可能只适用于 Linux。
  • 谢谢,此答案的其中一位 cmets 指出了您的建议:stackoverflow.com/a/124557/376742 exec("curl $url > /dev/null 2>&1 &");
  • wget 与 curl 不同,但它们都发出 HTTP 请求。如果您不担心退货,则两者都应该有效。只是不要将用户提供的数据放入exec 而不使用escapeshellarg 或类似unix.stackexchange.com/questions/47434/…

标签: php apache message-queue asynchttpclient


【解决方案1】:

正如@ArtisticPhoenix 在 cmets 上发布的那样,可以使用:

exec("curl $url > /dev/null 2>&1 &");

对于扩展问题,我没有进一步采用该解决方案。

【讨论】:

    猜你喜欢
    • 2010-11-13
    • 1970-01-01
    • 2011-07-11
    • 2018-04-16
    • 2020-03-18
    • 2019-07-30
    • 2011-08-13
    • 1970-01-01
    • 2021-06-23
    相关资源
    最近更新 更多