小程序server請求微信服務(wù)器超時的解決方法
今天有同學(xué)在測試小程序的過程中,發(fā)現(xiàn)一個問題,調(diào)用 微信官方的服務(wù)端接口超時 ,比如這個接口,https://api.weixin.qq.com/sns/jscode2session ,因為我們小程序登錄的時候,會在自己server端調(diào)用微信的API,這個接口超時,導(dǎo)致我們的登錄流程也就掛掉了。本來以為是偶爾的網(wǎng)絡(luò)問題,但是,同學(xué)發(fā)現(xiàn)在測試服務(wù)器上,很穩(wěn)定的復(fù)現(xiàn)超時!但是在我們本地測試過程中,請求微信服務(wù)器又很快響應(yīng)。嗯,理論上微信服務(wù)器不會出問題的……
試著在服務(wù)器上去 curl 微信的接口,確實挺慢的,我們代碼里配置了超時是3秒,目測確實超過了3秒才返回!抱著僥幸的想法,讓同學(xué)把超時改成5秒,依然超時……嗯,略微有點尷尬。
試著 ping api.weixin.qq.com
,發(fā)現(xiàn)收到第一個包,隔著挺長時間,后面的包平均幾十毫秒,網(wǎng)絡(luò)應(yīng)該也沒問題吧。
沒辦法了,因為是服務(wù)端,只能用 curl,想看看這個工具能不能提供一下,整個請求的各個階段,時間是怎么分布的。搜了一下,還真有這個功能,具體操作如下:
在某個目錄下,新建一個文件,比如 curl-format.txt ,內(nèi)容如下:
time_namelookup: %{time_namelookup}\n time_connect: %{time_connect}\n time_appconnect: %{time_appconnect}\n time_pretransfer: %{time_pretransfer}\n time_redirect: %{time_redirect}\n time_starttransfer: %{time_starttransfer}\n ----------\n time_total: %{time_total}\n
在同一個目錄下,執(zhí)行 curl 操作:
curl -w "@curl-format.txt" -o /dev/null -s "https://api.weixin.qq.com/sns/jscode2session?xxx=xxx&xx=aa"
拿到的結(jié)果如下:
在網(wǎng)上查閱了下,各個字段含義如下(單位都是 秒 ):
- time_namelookup: DNS 域名解析的時候,就是把 https://zhihu.com 轉(zhuǎn)換成 ip 地址的過程
- time_connect: TCP 連接建立的時間,就是三次握手的時間
- time_appconnect: SSL/SSH 等上層協(xié)議建立連接的時間,比如 connect/handshake 的時間
- time_pretransfer: 從開始到最后一個請求事務(wù)的時間
- time_redirect: 從請求開始到響應(yīng)開始傳輸?shù)臅r間
- time_starttransfer: 從請求開始到第一個字節(jié)將要傳輸?shù)臅r間
- time_total: 這次請求花費的全部時間
從上面截圖中可以看出,我們服務(wù)器上,在DNS域名解析階段,就花了 5秒 ,難怪會超時了……
找到了問題,那就先在機器上修改 /etc/hosts 文件,寫死一個微信域名的IP解析,暫時 把這個問題修復(fù)了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
CSS中position屬性之fixed實現(xiàn)div居中
這篇文章主要介紹了CSS中position屬性之fixed實現(xiàn)div居中的相關(guān)資料,需要的朋友可以參考下2015-12-12微信開發(fā) 使用picker封裝省市區(qū)三級聯(lián)動模板
這篇文章主要學(xué)習(xí)微信開發(fā),如何使用picker封裝省市區(qū)三級聯(lián)動模板,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10JavaScript事件概念詳解(區(qū)分靜態(tài)注冊和動態(tài)注冊)
這篇文章主要介紹了JavaScript事件(區(qū)分靜態(tài)注冊和動態(tài)注冊)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用JavaScript,感興趣的朋友可以了解下2021-02-02javascript設(shè)計模式 – 中介者模式原理與用法實例分析
這篇文章主要介紹了javascript設(shè)計模式 – 中介者模式,結(jié)合實例形式分析了javascript中介者模式基本概念、原理、用法及操作注意事項,需要的朋友可以參考下2020-04-04Javascript中產(chǎn)生固定結(jié)果的函數(shù)優(yōu)化技巧
分享一個Javascript編寫函數(shù)的優(yōu)化技巧;適用的函數(shù)應(yīng)該要滿足以下條件;產(chǎn)生固定結(jié)果;復(fù)雜或較耗時等等,感興趣的朋友可以了解下2013-01-01