小程序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入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
dojo学习第二天 ajax异步请求之绑定列表
Aug 29 Javascript
jquery连缀语法如何实现
Nov 29 Javascript
利用jQuery实现可以编辑的表格
May 26 Javascript
javascript中不提供sleep功能如何实现这个功能
May 27 Javascript
jquery中show()、hide()和toggle()用法实例
Jan 15 Javascript
跟我学习javascript的闭包
Nov 16 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
Nov 09 Javascript
解析jQueryEasyUI的使用
Nov 22 Javascript
基于javascript实现按圆形排列DIV元素(一)
Dec 02 Javascript
angular+ionic返回上一页并刷新页面
Aug 08 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
May 28 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
通过html表格发电子邮件
2006/10/09 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
CSS心形加载的动画源码的实现
2021/03/09 HTML / CSS
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
获取客户端电脑日期时间js代码(jquery)
2012/09/12 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
Python入门篇之列表和元组
2014/10/17 Python
Python编程入门的一些基本知识
2015/05/13 Python
Python验证码识别处理实例
2015/12/28 Python
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
Python计算时间间隔(精确到微妙)的代码实例
2019/02/26 Python
python爬虫如何解决图片验证码
2021/02/14 Python
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
聚网科技C++面试笔试题
2015/09/01 面试题
配置管理计划的主要内容有哪些
2014/06/20 面试题
计算机网络专业自荐信
2014/07/04 职场文书
创先争优个人承诺书
2014/08/30 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书
追悼会答谢词范文
2015/09/29 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js