小程序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 相关文章推荐
Ext.MessageBox工具类简介
Dec 10 Javascript
浅谈Javascript鼠标和滚轮事件
Jun 27 Javascript
JQuery Highcharts 动态生成图表的方法
Nov 15 Javascript
JavaScript模拟重力状态下抛物运动的方法
Mar 03 Javascript
JavaScript forEach()遍历函数使用及介绍
Jul 08 Javascript
详解JavaScript中的Unescape()和String() 函数
Nov 09 Javascript
javascript实现的左右无缝滚动效果
Sep 19 Javascript
angular2倒计时组件使用详解
Jan 12 Javascript
js模拟微博发布消息
Feb 23 Javascript
基于iview的router常用控制方式
May 30 Javascript
微信小程序日历插件代码实例
Dec 04 Javascript
Vue实现tab导航栏并支持左右滑动功能
Jun 28 Vue.js
深入浅析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
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
怎么用javascript进行拖拽
2006/07/20 Javascript
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
Python 里最强的地图绘制神器
2021/03/01 Python
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
最新的大学生找工作自我评价
2013/09/29 职场文书
青年教师培训方案
2014/02/06 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
罗马假日观后感
2015/06/08 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
Python使用MapReduce进行简单的销售统计
2022/04/22 Python
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python