小程序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 相关文章推荐
Mootools 1.2教程 选项卡效果(Tabs)
Sep 15 Javascript
MooTools 页面滚动浮动层智能定位实现代码
Aug 23 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
javascript中全局对象的isNaN()方法使用介绍
Dec 19 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
Aug 05 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
May 06 Javascript
jQuery匹配文档链接并添加class的方法
Jun 26 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
Dec 03 Javascript
jquery实现图片预加载
Dec 25 Javascript
js闭包引起的事件注册问题介绍
Mar 29 Javascript
JavaScript数据存储 Cookie篇
Jul 02 Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 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 文本文件的读取效率
2012/02/10 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
网页中的图片的处理方法与代码
2009/11/26 Javascript
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
如何使用Python的Requests包实现模拟登陆
2018/04/27 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
设计模式的基本要素是什么
2014/04/21 面试题
旅游管理实习自我鉴定
2013/09/29 职场文书
本科生的职业生涯规划范文
2014/01/09 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
如何在Python中创建二叉树
2021/03/30 Python
PHP中strval()函数实例用法
2021/06/07 PHP
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang