【问题标题】:PHP Async Curl POST is slowing down my code in 500 msPHP Async Curl POST 在 500 毫秒内减慢了我的代码
【发布时间】:2019-05-09 06:43:30
【问题描述】:

我正在尝试扩大/加速我的应用程序

所以我正在开发一个保存数据并在保存数据后重定向的登录页面,为了保存数据,我在我的服务器上使用了另一个服务,该服务从 CURL 获取发布数据并将其发布到 Bigquery。

问题是 CURL 的执行时间约为 700 毫秒,当我删除 CURL 代码时,我正在以 95-110 毫秒的速度执行代码

这是我的 CURL 代码示例 -

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $request_url);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $array);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    curl_exec($ch);
    curl_close($ch);

如果是通过改进 curl 代码或替代解决方案,我希望将 curl 时间从 700 毫秒降低到 50-180 毫秒

【问题讨论】:

  • 你不能让 curl 跑得更快。获得更强大的服务器。检查带宽和网络延迟。

标签: php performance curl


【解决方案1】:

1) 尝试删除 FRESH_CONNECT,这将每次都创建一个新的 TCP,如果您追求的是速度,您不希望这样。

当您第一次执行 CURL 时,会建立 TCP 连接。发送数据时,连接保持活动状态,因此可以重复使用,默认时间为 60 秒。

因此,它将帮助您在 60 秒内完成第一个呼叫后的每个呼叫的速度。

2) 由于您没有使用 curl 的结果,因此您可以将数据放入队列中并使用 worker 发送 curl。

【讨论】:

  • 嘿弗拉德,你能详细说明第二点吗?新的连接在 50 毫秒内优化了我的代码我也在使用 appengine 环境你认为 curl 有什么替代方法吗?仅供参考,我正在发布数据,但我不需要处理结果
  • 很高兴我的评论有所帮助。由于您对 curl 的结果不做任何事情,您可以查看消息代理,如 RabbitMQ 或任何 Pub/Sub 解决方案,这将允许您发布包含 $request_url$postFields 的消息并有不同的进程监听队列和执行卷曲。这样,它会更快地加快速度,因为您的主脚本将不再等待 curl。我喜欢这比实现可能最终导致您的 curl 不被发送的超时更好。
【解决方案2】:

所以我找到了一个解决方案来构建异步 curl 以毫秒而不是秒的响应

我换了

curl_setopt($ch, CURLOPT_TIMEOUT, 1);

curl_setopt($ch, CURLOPT_TIMEOUT_MS, 50);

这样我可以将卷曲帖子的最大时间限制为 50 毫秒

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2019-09-07
    相关资源
    最近更新 更多