精华内容
下载资源
问答
  • APP请求超时问题-ios超时-android超时

    千次阅读 2018-11-09 15:53:00
    用wifi网络一直超时,但qq等却正常.换成手机卡网络正常. 起初以为是DNS解析问题. 后来抓包,发现DNS解析正常,可以得到正确的A记录. 但tcp retransmission严重. 因为app内使用了友盟等第三方库,他们的DNS,tcp握手...

    最近发现公司的app在高峰期超时严重.用wifi网络一直超时,但qq等却正常.换成手机卡网络正常.

    起初以为是DNS解析问题.

    后来抓包,发现DNS解析正常,可以得到正确的A记录.

    但tcp retransmission严重.

     

    因为app内使用了友盟等第三方库,他们的DNS,tcp握手均正常.

    而我们的app却tcp retransmission严重.

     

    后来找到一篇文章,照着修改了服务器配置...超时少了.

    下面是转发文章内容

    内网有一台APP服务器,接口是通过Nginx发布的。手机通过无线登陆APP,有时候提示连接超时。

    无线路由器和APP服务器,是通过内网交换机连接的。应该不会超时啊,可能是路由器问题。

    然后换了好几个路由器,小米mini,华硕RT-AC87U,TP-LINK WVR1750G

    咨询厂商,测试了一下,当时超时的时候,访问百度视频什么的是正常的。路由器没有问题,可能是服务器问题。因为服务器是pc机主机,配置比较差,后来换成DELL R620,还是同样的问题。

    因为公司周围有30几个无线,2.4G传输速度是450M,可能是无线干扰问题。

    最后买了一个Nighthawk X6 R8000,2.4G传输速度是600M,发现还是有超时。

    网上搜索资料nginx超时问题,优化了一些参数,发现还是有超时。

    手机安装(Ping & DNS)软件,版本是2.3,用TCP Ping持续测试dts.xx.com,

    大约1~2分钟,提示connection timed out,超时会持续一分钟。出现超时的时候,手机登陆APP,就会提示连接超时。

    然后超时的时候,在服务器抓包

    [root@localhost ~]#tcpdump -i eth0 -s0 -w a.cap

     

    发现无线路由器向服务器发送了SYN请求包,但是没有得到服务器回应。

    出现TCP Retransmission(TCP 包重传)

    因为服务器开启了tcp_tw_recycle(为了支持高并发)

    tcp请求回收,如果开了这个,那在默认60s内同一个ip包过来是会被回收的

    网络过来的数据包的时间肯定是小于这个请求时间的,那么服务器就会认为他是无效的连接,就会拒绝连接,所以才会出现TCP包重传。

    所以才会出现上面的现象,超时持续一分钟。

    后来我把tcp_tw_recycle关了

    vi /etc/sysctl.conf

    设置为0,表示关闭

    net.ipv4.tcp_tw_reuse = 0

    net.ipv4.tcp_tw_recycle = 0

    加载配置

    [root@localhost ~]#sysctl -p

    最后再次用TCP Ping测试,测试20分钟,没有出现连接超时。

    APP刷新数据,也没有出现超时。

    哎,解决这个问题,之前都是靠瞎猜的。分析问题没有层层刨析,搞了这么长时间,才搞定。

    路由器只提供数据转发功能,只要转发了,它的任务就完成了。

    应该是服务器问题,然后抓包,为什么服务器没有回应?

    为什么出现TCP Retransmission(TCP 包重传)?

    这样问题就越来越接近真相了,就好解决了,就好像福尔摩斯一样。

    后来发现系统日志出现

    Jun 19 11:13:45 127.0.0.1TCP: time wait bucket table overflow

    那就只能增加net.ipv4.tcp_max_tw_buckets的值

    net.ipv4.tcp_max_tw_buckets = 100000

    加载配置

    [root@localhost ~]#sysctl -p

    再次观察,就没有了。

    http://www.51itong.net/nginx-app-12760.html
    ---------------------
    作者:james_1010
    来源:CSDN
    原文:https://blog.csdn.net/james_1010/article/details/50387659
    版权声明:本文为博主原创文章,转载请附上博文链接!

    转载于:https://www.cnblogs.com/zgq123456/p/9935560.html

    展开全文
  • 前言 连的是腾讯地图的地点云api 报错 Uncaught (in promise) {...const {result} = await this.$jsonp('https://apis.map.qq.com/place_cloud/data/list', { key: process.env.VUE_APP_MAP_KEY, table_id: '605

    前言

    连的是腾讯地图的地点云api

    报错

    Uncaught (in promise) {statusText: "Request Timeout", status: 408}
    

    解决

    加个参数 output: ‘jsonp’

    demo

    const {result} = await this.$jsonp('https://apis.map.qq.com/place_cloud/data/list', {
      key: process.env.VUE_APP_MAP_KEY,
      table_id: '605a9cbd7241915c502ab650',
      page_size: 20,
      output: 'jsonp'
    })
    
    展开全文
  • 通过golang context实现请求超时控制和goroutine生命周期控制 下例中:lazyHander负责请求参数处理和context的初始化: 客户端发送超时参数,采用WithTimeout来控制context在指定时间内关闭其管道,若所有子进程中均...

    原文链接:https://blog.csdn.net/qq180782842/article/details/88942602

    通过golang context实现请求超时控制和goroutine生命周期控制

    下例中:lazyHander负责请求参数处理和context的初始化:

    客户端发送超时参数,采用WithTimeout来控制context在指定时间内关闭其管道,若所有子进程中均声明了正确的context信号接收处理,则lazyHandler派生的所有子进程会返回并被回收。

    若客户端不发送超时参数,则采用WithCancel函数来控制所有子线程的生命周期。若所有子进程中均声明了正确的context信号接收处理,一旦lazyHandler的defer cancel语句被执行,则由lazyHandler派生的所有子进程会返回并被回收。

    func lazyHandler(resp http.ResponseWriter, req *http.Request) {
    var (
    ctx context.Context
    cancel context.CancelFunc
    )
    query, err := url.ParseQuery(req.URL.RawQuery)
    if err != nil{
    log.Fatalln(“Http error”)
    }
    keys, ok := query[“timeout”]
    if !ok {
    ctx, cancel = context.WithCancel(context.Background())
    } else {
    timeout, err := time.ParseDuration(keys[0])
    if err != nil {
    ctx, cancel = context.WithCancel(context.Background())
    } else {
    ctx, cancel = context.WithTimeout(context.Background(), timeout)
    }
    }
    defer cancel()
    s := funcA(ctx)
    resp.Write([]byte(s))
    }

    funcA是handler的主要业务逻辑,包含异步操作。

    func funcA(ctx context.Context) string{
    c := make(chan error, 1)
    go func() {
    c <- funcB(ctx, func()error {
    time.Sleep(time.Duration(5) * time.Second)
    return nil
    })
    }()
    select {
    case <-ctx.Done():
    err:= <-c
    return ctx.Err().Error() +"; " + err.Error()
    case <-c:
    return “Lazy reply after 5 sec”
    }
    }

    这里注意,虽然ctx.Done()信号已被接收,并不意味这该函数能马上返回,因为若该函数涉及到子线程funcB的调用,则需要等待子线程返回,否则子线程会失去控制且可能引起内存泄露。

    func funcB(ctx context.Context, f func() error) error {
    c := make(chan error ,1)
    go func(){
    c <- f()
    }()
    select {
    case <-ctx.Done():
    return errors.New(“Interrupt by context”)
    case err:= <-c:
    return err
    }
    }

    子线程funcB同样能接收parent context的ctx.Done(),能在timeout指定时间内强制返回,或正常执行到程序段结束。另外,lazyHandler的defer cancel()也能确保funcB总能结束。

    若funcA中涉及到服务之间的调用,即调用某api的endpoint, 也可以将context存于request中,利用request接口来实现请求超时。

    func funcA(ctx context.Context) string {
    c := make(chan string, 1)
    go func() {
    c <- func(ctx context.Context) string{
    req, err := http.NewRequest(“GET”, “http://localhost:8079/”, nil)
    if err != nil {
    return err.Error()
    }
    req = req.WithContext(ctx)
    resp, err := http.DefaultClient.Do(req)
    if err != nil {
    return err.Error()
    }else{
    data, _ := ioutil.ReadAll(resp.Body)
    resp.Body.Close()
    return string(data)
    }
    }(ctx)
    }()
    select {
    case <-ctx.Done():
    err := <-c
    return ctx.Err().Error() + "; " + err
    case str:= <-c:
    return str
    }
    }

    注意, 这里使用了req = req.WithContext(ctx), 使得context传到req对象中,实现类似funcB中的子线程控制。

    通过中间件Middleware传入带有timeout的context, 参见
    开发者可以更优雅地通过中间件的形式设置timeout, 另外必须在handler实现中使用select监听ctx.Done()信号, 或将该ctx交由支持ctx作为参数的接口方法处理, 如:

    rpcResponse, err := grpcFuncFoo(ctx, …)
    1
    此方法与上方法原理上相同。

    展开全文
  • 今天有同学在测试小程序的过程中,发现一个问题,调用 微信官方的服务端接口超时 ,比如这个接口,https://api.weixin.qq.com/sns/jscode2session ,因为我们小程序登录的时候,会在自己server端调用微信的API,这个...
  • 今天有同学在测试小程序的过程中,发现一个问题,调用 微信官方的服务端接口超时 ,比如这个接口,https://api.weixin.qq.com/sns/jscode2session ,因为我们小程序登录的时候,会在自己server端调用微信的API,这个...

    今天有同学在测试小程序的过程中,发现一个问题,调用 微信官方的服务端接口超时 ,比如这个接口,https://api.weixin.qq.com/sns/jscode2session ,因为我们小程序登录的时候,会在自己server端调用微信的API,这个接口超时,导致我们的登录流程也就挂掉了。本来以为是偶尔的网络问题,但是,同学发现在测试服务器上,很稳定的复现超时!但是在我们本地测试过程中,请求微信服务器又很快响应。嗯,理论上微信服务器不会出问题的……

    试着在服务器上去 curl 微信的接口,确实挺慢的,我们代码里配置了超时是3秒,目测确实超过了3秒才返回!抱着侥幸的想法,让同学把超时改成5秒,依然超时……嗯,略微有点尴尬。

    试着 ping api.weixin.qq.com ,发现收到第一个包,隔着挺长时间,后面的包平均几十毫秒,网络应该也没问题吧。

    没办法了,因为是服务端,只能用 curl,想看看这个工具能不能提供一下,整个请求的各个阶段,时间是怎么分布的。搜了一下,还真有这个功能,具体操作如下:

    1. 在某个目录下,新建一个文件,比如 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
    复制代码
    1. 同一个目录下,执行 curl 操作:
    curl -w "@curl-format.txt" -o /dev/null -s "https://api.weixin.qq.com/sns/jscode2session?xxx=xxx&xx=aa"
    复制代码

    拿到的结果如下:

    在网上查阅了下,各个字段含义如下(单位都是 ):

    • 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解析,暂时 把这个问题修复了。

    相关资料

    转载于:https://juejin.im/post/5ce2a64af265da1b7a4b46e5

    展开全文
  • 参考很多博主的资料原因应该是: 虚拟机的虚拟网卡网络连接错误,被分配了无效的IP。 一、什么是虚拟机的虚拟...https://blog.csdn.net/qq_38021767/article/details/84028635 在搜索框中搜索服务,停掉很多的windows下
  • token请求时,显示请求超时。 二、原因分析 这个异常有如下几个原因: (1)服务器没有开通 qyapi.weixin.qq.com 的外网权限 (2)服务器网络太慢 三、异常解决 1.验证外网访问权限 在服务器使用 ...
  • http://www.qq.com", "http://www.iqiyi.com", "http://www.163.com", "http://www.taobao.com", "http://www.sina.com.cn" }; private static ...
  • angular访问后台服务及监控会话超时的封装angular本身自带访问组件http和httpclient...实现思路概述:1、将请求入参和出参统一约定2、封装方法将请求参数、数据处理方法、数据呈现方法、访问错误处理方法封装在一起...
  • 超时与重试机制(1)—《亿级流量》

    千次阅读 2017-06-22 13:52:48
    https://mp.weixin.qq.com/s/-8dyHi7BVIfKlNWxUUskwg?utm_source=tuicool&utm_medium=referral 在实际开发过程中,笔者见...如果应用不设置超时,则可能会导致请求响应慢,慢请求累积导致连锁反应,甚至应用雪崩。
  • QGC参数请求流程(第一集) 联系作者 QQ 843230304 ...每次定时器超时3秒触发,或者飞机对象收到参数更新,不断检查丢失的参数,直到参数请求完毕或者超出参数请求次数,并且记忆请求失败的参数。 ...
  • 不过在尝试解析下面地址时显示 请求超时/返回空值 https://v.qq.com/x/cover/wvmn6sg298qr2w0/q0128rs8tpj.html https://v.qq.com/x/page/q0128rs8tpj.html</p> 这两个地址是同一个视频。 似乎是无法检测到。 猜测是...
  • PHP异步请求函数

    2013-06-17 17:16:11
    PHP异步请求函数 ... ignore_user_abort(TRUE);...//永久不超时 /* PHP异步执行函数 功能:用于执行耗时的PHP页面by:QQ 383624314 调用方法:$host=$_SERVER['HTTP_HOST']; $GET="/index.php?a=a&b=a"; async_
  • 但是我们RPC框架通信,从感觉上类似http调用,需要在一定时间内返回,否则就会发生超时断开。这里我们选择netty作为我们的socket框架,采用future方式进行通信。 Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司...
  • 在genProductArgs方法里添加 packageParams.add(new BasicNameValuePair("time_expire", ...DDMS 日志的话会看到orion 字段日志显示请求返回签名错误。 查看文档后 https://pay.weixin.qq.com/wiki/doc/api/jsap
  • 第一次进行网络请求的时候(时间A,数据data1),如果网络不好超时了,再次接着请求该接口(时间B,数据data2),服务器会收到两次请求的数据:时间A的data1和时间B的data2! 注意:如果多次超时请求,最终后台...
  • ServicePointManager.DefaultConnectionLimit = 500; ServicePointManager.Expect100Continue = true; ServicePointManager.... 上面代码为什么在部分电脑上超时,手动打开网页没问题,求思路! ``` ```
  • 结果一直出错,要不就是请求超时,要不就是未授权。 用smtp 开始的时候,端口使用495,结果是请求超时。 后来改成25,结果是未授权。 再后来听人说,有一个项目有用到企业QQ发邮件的,然后过去看,最开始也没有...
  • 复制代码 代码如下:<?phpdefine(‘APP_DIR’, dirname(__FILE__));define(‘COOKIE_FILE’, APP_DIR .... //会话记录文件define(‘VISITOR_CAPTURE_INTERVAL’, 3);... //请求超时20秒define(‘END_LINE’,
  • 下载QQ音乐付费歌曲升级代码

    千次阅读 2018-12-06 21:45:05
    1 超时参数的使用 在平时网上冲浪的过程中,我们经常会遇到网络波动,这个时候,一个请求等了很久可能仍然没有结果 对应的,在爬虫中,一个请求很久没有结果,就会让整个项目的效率变得非常低,这个时候我们就需要...
  • 请求“http://s.web2.qq.com/api/get_friend_uin2”时出现 超时,html='<title>A...0' </title></code></pre> 此时,登陆,接收、发送消息都正常</p><p>该提问来源于...
  • 本文实例讲述了php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法。分享给大家供大家参考,具体如下: 微信支付api.mch.weixin.qq....代码里用curl来请求微信,经常超时,这时使用wget试验: [root@01 tm
  • QQ空间的JSONP示例

    2012-12-28 14:29:00
    根据Velocity的演讲“性能优化无未日--Qzone首页性能优化2012篇”写的一个例子 书写的示例,没有做请求成功、失败的处理方法,在实际应用中是需要进行清理操作和超时处理的。 function JSONGetter(url, callbackFn, ...
  • sonar-ws-6.7.7.jar

    2019-12-18 09:49:35
    修改HttpConnector 类请求超时时间为5分钟和十分钟,解决由于sonar分析请求太慢导致的超时 该资源存在问题请勿下载,请前往 https://download.csdn.net/download/qq_22970677/12040009 下载
  • ngnix 请求超时 参考链接:https://blog.csdn.net/qq_29663071/article/details/81061420 一般是由于程序执行时间过长导致响应超时,例如程序需要执行90秒,而nginx最大响应等待时间为30秒,这样就会出现超时。 1....
  • 一、浏览器中F5和CTRL F5的行为区别我们直接来看效果,下面是我打开qq网页,分别使用F5和CTRL F5,我们来看区别。F5: CTRL F5: 区别:首先直观上的区别是CTRL F5明显比F5加载速度慢了。观察资源加载发现,F5中大部分...

空空如也

空空如也

1 2 3 4 5 6
收藏数 119
精华内容 47
关键字:

qq请求超时