你的 CURL 请求超时了吗?

栏目: 服务器 · 发布时间: 6年前

内容简介:背景:服务器上线了一个事件推送的功能。即主服务器系统产生的一些充值与下单的操作,会把这些动作消息推送给指定的活动服务器。我们采用的是 CURL 请求。但是,上线一段时间内发现消息吞吐很小,有时间还伴随请求超时。但是,在我们的线上出现了这样一个错误:通过了解,发现这是一个与 DNS 解析有误的错误。

背景:服务器上线了一个事件推送的功能。即主服务器系统产生的一些充值与下单的操作,会把这些动作消息推送给指定的活动服务器。我们采用的是 CURL 请求。但是,上线一段时间内发现消息吞吐很小,有时间还伴随请求超时。

一、一个再正常不过的 PHP CURL 代码示例:

<?php
$data = ['code' => 'buy', 'userid' => '123456', 'money' => 30000];

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "http://www.xxx.com/event.php"); 
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_POSTFIELDS , $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$output = curl_exec($ch); 

echo $output;

curl_close($ch);

但是,在我们的线上出现了这样一个错误: name lookup timed out

通过了解,发现这是一个与 DNS 解析有误的错误。

DNS 解析时间耗时

curl -o /dev/null -s -w %{time_namelookup} www.baidu.com

二、DNS 与 IPV6 以及解决方案

因为,我们的服务器采用的是 CentOS 7。而默认情况下 CentOS 系统是开启了 IPV6 支持的。这就导致了 PHP 的 CURL 发起请求的时候,Linux 的 CURL 库会首先尝试 IPV6 网络去解析域名。但是,目前很多的 DNS 都不支持 IPV6。就导致了解析超慢或超时的情况。

既然,我们知道了是因为 DNS 不支持 IPV6 导致的问题。那么,要解决这个问题有必须做如下操作:

  • 换一个支持 IPV6 的 DNS
  • 关闭 Linux 系统的 IPV6
  • PHP 代码中强制使用 IPV4

(1) 换一个支持 IPV6 的 DNS

通过网络上的方案,是换成如下 DNS:

nameserver 114.114.114.114
nameserver 8.8.8.8

这个我没有试验过。我们采用的是关闭 Linux IPV6

(2) 关闭 Linux 系统的 IPV6

直接关闭 IPV6 是最容易的一件事情了。

编辑 /etc/sysctl.conf

# vim /etc/sysctl.conf

添加

IPv6 disabled

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

使其生效

# sysctl -p

(3) PHP 代码中强制使用 IPV4

在 PHP 5.3 版本开始才支持。

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

即使你的 PHP 大于 5.3 版本,也要保证 Linux 系统的 CURL 版本大于等于 7.10.8 版本。

当然,超时除了 DNS 超时,有可能你的系统代码也会超时。这就需要你自己去解决了。


以上所述就是小编给大家介绍的《你的 CURL 请求超时了吗?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Sprint

Sprint

Jake Knapp、John Zeratsky、Braden Kowitz / Simon & Schuster / 2016-3-8 / GBP 14.60

媒体推荐 “Every business leader I know worries about the same thing: Are we moving fast enough? The genius of Jake Knapp’s Sprint is its step-by-step breakdown of what it takes to solve big problems an......一起来看看 《Sprint》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具