小程序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 学习笔记一
Apr 07 Javascript
javascript数字数组去重复项的实现代码
Dec 30 Javascript
JS来动态的修改url实现对url的增删查改
Sep 05 Javascript
js简单判断flash是否加载完成的方法
Jun 21 Javascript
基于BootStrap实现局部刷新分页实例代码
Aug 08 Javascript
webpack实现热加载自动刷新的方法
Jul 30 Javascript
js实现各浏览器全屏代码实例
Jul 03 Javascript
微信小程序自定义弹窗wcPop插件
Nov 19 Javascript
vue项目设置scrollTop不起作用(总结)
Dec 21 Javascript
react实现同页面三级跳转路由布局
Sep 26 Javascript
JS如何在不同平台实现多语言方式
Jul 16 Javascript
Element InfiniteScroll无限滚动的具体使用方法
Jul 27 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中引用符号(&)的使用详解
2013/11/13 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
php短信接口代码
2016/05/13 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
简单了解Python中的几种函数
2017/11/03 Python
用python实现刷点击率的示例代码
2019/02/21 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
python 读取串口数据的示例
2020/11/09 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
单位介绍信范文
2014/01/18 职场文书
运动会四百米广播稿
2014/01/19 职场文书
施工材料员岗位职责
2014/02/12 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
Django模型层实现多表关系创建和多表操作
2021/07/21 Python