小程序server请求微信服务器超时的解决方法


Posted in Javascript onMay 21, 2019

今天有同学在测试小程序的过程中,发现一个问题,调用 微信官方的服务端接口超时 ,比如这个接口,https://api.weixin.qq.com/sns/jscode2session ,因为我们小程序登录的时候,会在自己server端调用微信的API,这个接口超时,导致我们的登录流程也就挂掉了。本来以为是偶尔的网络问题,但是,同学发现在测试服务器上,很稳定的复现超时!但是在我们本地测试过程中,请求微信服务器又很快响应。嗯,理论上微信服务器不会出问题的……

试着在服务器上去 curl 微信的接口,确实挺慢的,我们代码里配置了超时是3秒,目测确实超过了3秒才返回!抱着侥幸的想法,让同学把超时改成5秒,依然超时……嗯,略微有点尴尬。

试着 ping api.weixin.qq.com ,发现收到第一个包,隔着挺长时间,后面的包平均几十毫秒,网络应该也没问题吧。

没办法了,因为是服务端,只能用 curl,想看看这个工具能不能提供一下,整个请求的各个阶段,时间是怎么分布的。搜了一下,还真有这个功能,具体操作如下:

在某个目录下,新建一个文件,比如 curl-format.txt ,内容如下:

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

在同一个目录下,执行 curl 操作:

curl -w "@curl-format.txt" -o /dev/null -s "https://api.weixin.qq.com/sns/jscode2session?xxx=xxx&xx=aa"

拿到的结果如下:

小程序server请求微信服务器超时的解决方法

在网上查阅了下,各个字段含义如下(单位都是 秒 ):

  • time_namelookup: DNS 域名解析的时候,就是把 https://zhihu.com 转换成 ip 地址的过程
  • time_connect: TCP 连接建立的时间,就是三次握手的时间
  • time_appconnect: SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间
  • time_pretransfer: 从开始到最后一个请求事务的时间
  • time_redirect: 从请求开始到响应开始传输的时间
  • time_starttransfer: 从请求开始到第一个字节将要传输的时间
  • time_total: 这次请求花费的全部时间

从上面截图中可以看出,我们服务器上,在DNS域名解析阶段,就花了 5秒 ,难怪会超时了……

找到了问题,那就先在机器上修改 /etc/hosts 文件,写死一个微信域名的IP解析,暂时 把这个问题修复了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript高级程序设计 XML、Ajax 学习笔记
Sep 10 Javascript
JS匀速运动演示示例代码
Nov 26 Javascript
javascript函数作用域学习示例(js作用域)
Jan 13 Javascript
JavaScript删除数组元素的方法
Mar 20 Javascript
深入理解关于javascript中apply()和call()方法的区别
Apr 12 Javascript
JavaScript数组操作详解
Feb 04 Javascript
微信小程序 chooseImage选择图片或者拍照
Apr 07 Javascript
javascript中json对象json数组json字符串互转及取值方法
Apr 19 Javascript
jquery DataTable实现前后台动态分页
Jun 17 jQuery
JavaScript判断浏览器和hack滚动条的写法
Jul 23 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
May 27 Javascript
nuxt 路由、过渡特效、中间件的实现代码
Nov 06 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
May 21 #Javascript
用node.js写一个jenkins发版脚本
May 21 #Javascript
vue-router源码之history类的浅析
May 21 #Javascript
vue 地图可视化 maptalks 篇实例代码详解
May 21 #Javascript
vue 中使用 watch 出现了如下的报错的原因分析
May 21 #Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
May 21 #Javascript
vue+element创建动态的form表单及动态生成表格的行和列
May 20 #Javascript
You might like
PHP+DBM的同学录程序(2)
2006/10/09 PHP
php中计算时间差的几种方法
2009/12/31 PHP
PHP小技巧之函数重载
2014/06/02 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
python threading模块操作多线程介绍
2015/04/08 Python
Python中实现参数类型检查的简单方法
2015/04/21 Python
Python lxml模块安装教程
2015/06/02 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
深入理解Python对Json的解析
2017/02/14 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
python如何绘制疫情图
2020/09/16 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
电子信息科学专业自荐信
2014/01/30 职场文书
文明村镇申报材料
2014/05/06 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
销售会议开幕词
2015/01/28 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
七年级话题作文之执着
2019/11/19 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
Python实现拼音转换
2021/06/07 Python