小程序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 YUI 读码日记之 YAHOO.util.Dom - Part.3
Mar 22 Javascript
jQuery 定时局部刷新(setInterval)
Nov 19 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
Apr 05 Javascript
node.js学习总结之调式代码的方法
Jun 25 Javascript
浅析Node在构建超媒体API中的作用
Jul 30 Javascript
PHP实现记录代码运行时间封装类实例教程
May 08 Javascript
Angular2实现组件交互的方法分析
Dec 19 Javascript
三种Webpack打包方式(小结)
Sep 19 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
Apr 25 Javascript
聊聊Vue 中 title 的动态修改问题
Jun 11 Javascript
浅谈实现在线预览PDF的几种解决办法
Aug 10 Javascript
微信小程序实现点击生成随机验证码
Sep 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 加密与解密的斗争
2009/04/17 PHP
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
浅析memcache启动以及telnet命令详解
2013/06/28 PHP
php中数字0和空值的区别分析
2014/06/05 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
PHP常用函数之base64图片上传功能详解
2019/10/21 PHP
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
JavaScript DOM节点操作实例小结(新建,删除HTML元素)
2017/01/19 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
js中null与空字符串""的区别讲解
2019/01/17 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
Python合并多个Excel数据的方法
2018/07/16 Python
python开发游戏的前期准备
2019/05/05 Python
Python @property使用方法解析
2019/09/17 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
python切割图片的示例
2020/11/12 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
就业协议书的作用
2014/04/11 职场文书
中专生自荐信
2014/06/25 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
为什么RedisCluster设计成16384个槽
2021/09/25 Redis