小程序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 相关文章推荐
5 cool javascript apps
Mar 24 Javascript
Prototype Function对象 学习
Jul 12 Javascript
jquery select(列表)的操作(取值/赋值)
Mar 16 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
Nov 25 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
Feb 19 Javascript
一个js过滤空格的小函数
Oct 10 Javascript
json实现前后台的相互传值详解
Jan 05 Javascript
js数组去重的方法汇总
Jul 29 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
May 09 Javascript
微信小程序 http请求详细介绍
Oct 09 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
Oct 31 Javascript
详解为Bootstrap Modal添加拖拽的方法
Jan 05 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的declare控制符和ticks教程(附示例)
2014/03/21 PHP
php可变长参数处理函数详解
2017/02/22 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
2017/01/20 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
Python 处理图片像素点的实例
2019/01/08 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
几个数据库方面的面试题
2016/07/01 面试题
销售业务实习自我鉴定
2013/09/23 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
校园安全主题班会
2015/08/12 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
Python使用Kubernetes API访问集群
2021/05/30 Python
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
java多态注意项小结
2021/10/16 Java/Android