gpt4 book ai didi

php - 从 PHP 发送 HTTP 请求而不等待响应?

转载 作者:IT王子 更新时间:2023-10-29 00:56:18 25 4
gpt4 key购买 nike

我想要从 PHP 发送一个 HTTP GET 请求。示例:

http://tracker.example.com?product_number=5230&price=123.52

这个想法是做服务器端的网络分析:而不是发送跟踪信息从 JavaScript 到服务器,服务器发送跟踪信息直接发送到另一台服务器。

要求:

  • 请求应该花费尽可能少的时间,以免明显延迟 PHP 页面的处理。

  • 来自 tracker.example.com 的响应不需要是检查。例如,一些可能的回应来自tracker.example.com:

    • 200: 没关系,但不需要检查。

    • 404: 运气不好,但是 - 再次 - 不需要检查。

    • 301: 虽然重定向是合适的,但它会延迟PHP页面的处理,所以不要这样做。

    简而言之:所有响应都可以被丢弃。

解决方案的想法:

  • 在一个现已删除的答案中,有人建议调用命令行 curl从 PHP 在一个 shell 进程中。这似乎是个好主意,只是我不知道是否在下 fork 了很多shell进程负重是明智之举。

  • 我找到了php-ga , 一个做服务端谷歌的包来自 PHP 的分析。在项目的页面上,它是提到:“可以配置为 [...] 使用非阻塞请求。”到目前为止我还没有找到时间研究什么方法 php-ga内部使用,不过这个方法可以!

简而言之:做通用服务器端的最佳解决方案是什么来自 PHP 的跟踪/分析。

最佳答案

不幸的是,PHP 的定义是阻塞。虽然这适用于您通常要处理的大多数功能和操作,但当前的情况有所不同。

我喜欢调用的进程HTTP-Ping ,要求您只touch一个特定的URI,强制特定的服务器引导它的内部逻辑。某些功能允许您通过不等待响应来实现与此 HTTP-ping 非常相似的功能。

请注意,ping url 的过程是一个两步过程:

  1. 解析 DNS
  2. 提出请求

虽然在解析 DNS 并建立连接后发出请求应该相当快,但没有太多方法可以让 DNS 解析得更快。

进行 http-ping 的一些方法是:

  1. cURL , 通过将 CONNECTION_TIMEOUT 设置为低值
  2. fsockopen写完后立即关闭
  3. stream_socket_client (与 fsockopen 相同)并添加 STREAM_CLIENT_ASYNC_CONNECT

虽然在解析 DNS 时 cURLfsockopen 都处于阻塞状态。我注意到 fsockopen 明显更快,即使在最坏的情况下也是如此。

另一方面,

stream_socket_client 应该解决有关 DNS 解析的问题,并且应该是这种情况下的最佳解决方案,但我还没有设法让它工作。

一个最终的解决方案是启动另一个为您执行此操作的线程/进程。对此进行系统调用应该可以,而且forking目前的进程也应该这样做。不幸的是,在您无法控制 PHP 运行环境的应用程序中,两者都不是真正安全的。

系统调用经常被阻止,默认情况下不启用 pcntl。

关于php - 从 PHP 发送 HTTP 请求而不等待响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14359926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com