(轉)php-curl響應慢(開發微信授權登陸時碰到的問題)


最近在做一個php小項目的時候,發現curl調用微信的授權api.weixin.qq.com,經常是需要等待很久,但是有時候卻很快。

剛開始以為是網絡慢問題,沒去注意。后面通過打上時間日志觀察發現,慢的時候基本是在5秒。既然那么有規律了,那肯定是有某個問題的。

http請求的初始過程是什么呢?dns解析。

通過ping和wget命令,發現確實在域名解析的那個過程很慢。所以,最終在host直接寫死域名,解決了這個問題。

 

 

(

我也是,呵呵,省事,后期可以考慮安裝dns緩存服務

vim /etc/hosts 增加2行(微信支付好像用到的就是這個2個域名,前面的ip,請以你服務器上ping出來的為准)

140.207.135.108 api.weixin.qq.com
140.207.69.101 api.mch.weixin.qq.com

)

 

為什么是5秒(的確是5s,郁悶)呢?

我們知道配置dns服務的地址在/etc/resolv.conf。

通過man resolv.conf可以找到

timeout:n
                           sets the amount of time the resolver will wait for
                           a response from a remote name server before retry-
                           ing the query via a different name server.  Mea-
                           sured in seconds, the default is RES_TIMEOUT (see
                           <resolv.h> ).

查看/usr/include/resolv.h 可以找到這行代碼 # define RES_TIMEOUT                5        /* min. seconds between retries */

問題是解決了,但是卻引申出了很多知識點。

dns的解析默認超時時間是5秒

網上說,有可能是開啟了ipv6卻沒有給這個域名分配ipv6的地址,通過查看vim /etc/modprobe.conf,發現沒有開啟ipv6功能。

查看域名的解析過程有dig命令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM