V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hytex
V2EX  ›  Java

提问大佬,接口方法没问题,但是返回超时怎么解决?

  •  
  •   hytex · 2020-03-04 00:08:23 +08:00 · 4230 次点击
    这是一个创建于 1762 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近有个接口,是小程序的,通过这个接口代理转发请求到另一个服务器,然后方法里已经从另一个服务器的接口中获取了数据,在 return 到小程序的时候,出现了超时的情况,请问各位大佬这个可能是由于什么原因导致的呢。 并且代理的接口,并不是全都不行,有一部分可以。

    15 条回复    2020-03-05 13:23:42 +08:00
    hytex
        1
    hytex  
    OP
       2020-03-04 00:15:16 +08:00
    并且在访问 A 服务器的 a 接口,无论数据长短都超时, 但在访问 B 服务器的相同接口时,数据长的就超时,短的不超时
    sleepm
        2
    sleepm  
       2020-03-04 00:18:23 +08:00 via Android
    在请求的时候设置超时时间,一点一点调个合适的
    hytex
        3
    hytex  
    OP
       2020-03-04 00:24:52 +08:00
    @sleepm 设置超时时间是在小程序的代理接口这里么, 现目前结构是 小程序这边调用一个代理接口,然后代理接口通过 http 工具类访问需要获取数据的接口。 现在代理接口的 http 工具类已经加上超时时间了, 您的意思我在这个代理接口再设置一个超时时间吗
    keepro
        4
    keepro  
       2020-03-04 00:30:20 +08:00
    1,检查服务端接口超时配置项;
    2,查阅相关服务访问日志;
    3,使用 winshark 等抓包软件在客户端和服务端抓包,并分析。
    cnzjl
        5
    cnzjl  
       2020-03-04 00:32:25 +08:00 via Android
    设置下请求超时时间,不通过反向代理测试一下,再看看是否设置了报文请求大小。
    hytex
        6
    hytex  
    OP
       2020-03-04 00:44:41 +08:00
    @keepro 服务端超时配置我对着网上的一篇文章修改了,时间为 31S 貌似 。其他的两点谢谢提供思路
    hytex
        7
    hytex  
    OP
       2020-03-04 00:45:13 +08:00
    @cnzjl 不通过反向代理这个确实还没有试过,谢谢提供思路
    also24
        8
    also24  
       2020-03-04 01:25:40 +08:00
    『出现了超时的情况』指的是『哪一端』的什么地方报出的超时?

    mini APP -> API Proxy -> API Server

    是 API Server 直接返回了 504 超时错误?
    还是 API Proxy 在请求 API Server 时( TCP/HTTP )连接超时?
    亦或者是 API Proxy 直接返回了 504 超时错误?
    还是小程序端请求接口的代码请求超时了?

    A B 服务器,指的是两个不同的 API Server 嘛?
    还是说其中一个指的是 API Proxy ?

    『服务端超时配置』改成了 31S,改的是哪一个服务器的呢?
    hytex
        9
    hytex  
    OP
       2020-03-04 16:24:25 +08:00
    @also24 小程序请求的超时了, 对的不同的 api server,您说的 api proxy 通过小程序传的不同参数访问不同的 api server 获取数据,然后再通过 api proxy 返回小程序,在 api proxy 返回刀小程序这一阶段超时了。 修改的超时配置师 api proxy 所在的服务器。
    also24
        10
    also24  
       2020-03-04 19:10:01 +08:00
    @hytex #9
    那你应该修改小程序端的请求代码的超时配置。

    参见小程序开发文档:

    默认超时时间和最大超时时间都是 60s ;
    超时时间可以在 app.json 或 game.json 中通过 networktimeout 配置。

    https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html#%E8%B6%85%E6%97%B6%E6%97%B6%E9%97%B4
    also24
        11
    also24  
       2020-03-04 19:18:05 +08:00
    @hytex #9
    另外,再次强调一下,服务器返回 504 超时,和小程序的请求自身超时,是两件事,不要搞混了。
    (还有 TCP 连接超时也是超时,但按说这种情况下不太容易遇到)

    既然 API Server 返回的不是 504,说明 API Server 自身内部执行代码没有超时。

    而 API Proxy 返回的不是 504 或 500,也说明从 Proxy 到 API Server 间的反代请求过程没有超时。
    (此处如果是使用 nginx 配置的反代,需要注意一个 nginx 配置,参见这个帖子:/t/637941 )

    此时,整个请求时间 =
    小程序到 API Proxy 间的延迟( TCP 耗时) + API Proxy 到 API Server 的延迟( TCP 耗时)
    + API Server 发送数据到 Proxy 的时长( HTTP 耗时) + Proxy 发送数据到小程序的时长( HTTP 耗时)

    也就是两份 TCP 耗时 + 两份 HTTP 耗时,在网络非常差、或者数据非常大的情况下,还是有可能出现的。
    如果相应的时长已经非常长,建议也可以检查一下各端之间的网络链路质量是否良好。
    also24
        12
    also24  
       2020-03-04 19:21:23 +08:00
    最后补充问题:
    『数据长的就超时,短的不超时』

    是否能提供一下这里长短数据的大致长度(字节数)。
    hytex
        13
    hytex  
    OP
       2020-03-05 10:07:56 +08:00
    @also24 已经解决了…一直着急后端,前端的报错忽视了,通过前端返回的报错知道师 nginx 的临时缓存目录没有权限,不过还是 i 谢谢大佬了,以后如果出现此类情况,可以参照着做一下
    also24
        14
    also24  
       2020-03-05 12:10:23 +08:00 via Android
    @hytex
    按你这样的说法,小程序那边不应该返回 『超时』啊
    hytex
        15
    hytex  
    OP
       2020-03-05 13:23:42 +08:00
    @also24 这就不清楚了 ,前端那边的错误返回出来是这样…我们也一直纳闷…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1343 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 17:17 · PVG 01:17 · LAX 09:17 · JFK 12:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.