小程序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 相关文章推荐
html+css+js实现xp window界面及有关功能
Mar 26 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
Oct 10 Javascript
javascript类型系统 Array对象学习笔记
Jan 09 Javascript
sso跨域写cookie的一段js脚本(推荐)
May 25 Javascript
js防阻塞加载的实现方法
Sep 09 Javascript
webpack学习教程之publicPath路径问题详解
Jun 17 Javascript
微信浏览器禁止页面下拉查看网址实例详解
Jun 28 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
浅谈对于react-thunk中间件的简单理解
May 01 Javascript
VUE 解决mode为history页面为空白的问题
Nov 01 Javascript
node.js中npm包管理工具用法分析
Feb 14 Javascript
Vue 组件的挂载与父子组件的传值实例
Sep 02 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 cli 方式 在crotab中运行解决
2010/02/08 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
javascript prototype,executing,context,closure
2008/12/24 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
python的sys.path模块路径添加方式
2020/03/09 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
儿科护理实习自我鉴定
2013/09/19 职场文书
理想演讲稿范文
2014/05/21 职场文书
党建目标管理责任书
2014/07/25 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书