小程序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判断元素的子元素是否存在的示例代码
Feb 04 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
Jun 09 Javascript
浅析AngularJS Filter用法
Dec 28 Javascript
vue,angular,avalon这三种MVVM框架优缺点
Apr 27 Javascript
jquery 中toggle的2种用法详解(推荐)
Sep 02 Javascript
最好用的Bootstrap fileinput.js文件上传组件
Dec 12 Javascript
JS实现的添加弹出层并完成锁屏操作示例
Apr 07 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
基于游标的分页接口实现代码示例
Nov 12 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
May 03 Javascript
Vue——前端生成二维码的示例
Dec 19 Vue.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个人网站架设连环讲(二)
2006/10/09 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
php猜单词游戏
2015/09/29 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
jquery实现经典的淡入淡出选项卡效果代码
2015/09/22 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
关于vue-resource报错450的解决方案
2017/07/24 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
详解vue中axios的封装
2018/07/18 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
python生成器generator用法实例分析
2015/06/04 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
Python之Sklearn使用入门教程
2021/02/19 Python
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
公司周年庆典标语
2014/10/07 职场文书
经理岗位职责
2015/02/02 职场文书
齐云山导游词
2015/02/06 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫