小程序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模板技术
Apr 27 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
Aug 09 Javascript
javascript中万恶的function实例分析
May 25 Javascript
jQuery 源码分析笔记(4) Ready函数
Jun 02 Javascript
jquery应该如何来设置改变按钮input的onclick事件
Dec 10 Javascript
javascript 中that的含义示例介绍
May 14 Javascript
Javascript之BOM(window对象)详解
May 25 Javascript
js 自带的sort() 方法全面了解
Aug 16 Javascript
javascript 内置对象及常见API详细介绍
Nov 01 Javascript
实现div内部滚动条滚动到底部和顶部的代码
Nov 15 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
Jul 02 Javascript
JavaScript实现前端倒计时效果
Feb 09 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循环获取GET和POST值的代码
2008/04/09 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
老生常谈PHP面向对象之解释器模式
2017/05/17 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
2015/12/13 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
基于vue实现探探滑动组件功能
2020/05/29 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
Python实现SVN的目录周期性备份实例
2015/07/17 Python
python中range()与xrange()用法分析
2016/09/21 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
python3 中时间戳、时间、日期的转换和加减操作
2020/07/14 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
英国自行车商店:AW Cycles
2021/02/24 全球购物
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
程序员经常用到的UNIX命令
2015/04/13 面试题
毕业生就业自荐书
2013/12/15 职场文书
法律专业应届生自荐信范文
2014/01/06 职场文书
《蚕姑娘》教学反思
2014/04/15 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
领导班子党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
大学生十八大感想
2015/08/11 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js