小程序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 相关文章推荐
简单的代码实现jquery定时器
Jan 03 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
Mar 02 Javascript
JS实现仿FLASH效果的竖排导航代码
Sep 15 Javascript
JS实现的颜色实时渐变效果完整实例
Mar 25 Javascript
AngularJS中的过滤器filter用法完全解析
Apr 22 Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 Javascript
jquery与ajax获取特殊字符实例详解
Jan 08 Javascript
Angular ui.bootstrap.pagination分页
Jan 20 Javascript
JS判断一个数是否是水仙花数
Jun 11 Javascript
基于JavaScript实现弹幕特效
Aug 27 Javascript
jQuery实现聊天对话框
Feb 08 jQuery
如何实现js拖拽效果及原理解析
May 08 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正确配置mysql(apache环境)
2011/08/28 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
Python文件读取的3种方法及路径转义
2015/06/21 Python
Python用threading实现多线程详解
2017/02/03 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
python机器学习之决策树分类详解
2017/12/20 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
python简单实现9宫格图片实例
2020/09/03 Python
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
护理专业应届毕业生推荐信
2013/11/15 职场文书
村委会贫困证明
2014/01/14 职场文书
医院辞职信范文
2014/01/17 职场文书
大学生精神文明先进个人事迹材料
2014/05/02 职场文书
热门专业求职信
2014/05/24 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书