小程序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 相关文章推荐
input按钮的事件处理大全
Dec 10 Javascript
js使用setTimeout实现定时炸弹的方法
Apr 10 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
Nov 05 Javascript
jQuery侧边栏实现代码
May 06 Javascript
详解Node.js项目APM监控之New Relic
May 12 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
Jul 30 Javascript
angular ng-model 无法获取值的处理方法
Oct 02 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
Apr 28 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
Sep 05 Javascript
使用layui 的layedit定义自己的toolbar方法
Sep 18 Javascript
Vue分页效果与购物车功能
Dec 13 Javascript
JS实现烟花爆炸效果
Mar 10 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连接函数implode与分割explode的深入解析
2013/06/26 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
8个实用的jQuery技巧
2014/03/04 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中datetime常用时间处理方法
2015/06/15 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
在keras里实现自定义上采样层
2020/06/28 Python
如何验证python安装成功
2020/07/06 Python
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
乡镇安全生产目标责任书
2014/07/23 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
泰山导游词
2015/02/02 职场文书
大连星海广场导游词
2015/02/10 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
如何写好竞聘报告
2019/04/03 职场文书
一文简单了解MySQL前缀索引
2022/04/03 MySQL