最近有个接口,是小程序的,通过这个接口代理转发请求到另一个服务器,然后方法里已经从另一个服务器的接口中获取了数据,在 return 到小程序的时候,出现了超时的情况,请问各位大佬这个可能是由于什么原因导致的呢。 并且代理的接口,并不是全都不行,有一部分可以。
1
hytex OP 并且在访问 A 服务器的 a 接口,无论数据长短都超时, 但在访问 B 服务器的相同接口时,数据长的就超时,短的不超时
|
2
sleepm 2020-03-04 00:18:23 +08:00 via Android
在请求的时候设置超时时间,一点一点调个合适的
|
3
hytex OP @sleepm 设置超时时间是在小程序的代理接口这里么, 现目前结构是 小程序这边调用一个代理接口,然后代理接口通过 http 工具类访问需要获取数据的接口。 现在代理接口的 http 工具类已经加上超时时间了, 您的意思我在这个代理接口再设置一个超时时间吗
|
4
keepro 2020-03-04 00:30:20 +08:00
1,检查服务端接口超时配置项;
2,查阅相关服务访问日志; 3,使用 winshark 等抓包软件在客户端和服务端抓包,并分析。 |
5
cnzjl 2020-03-04 00:32:25 +08:00 via Android
设置下请求超时时间,不通过反向代理测试一下,再看看是否设置了报文请求大小。
|
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,改的是哪一个服务器的呢? |
9
hytex OP @also24 小程序请求的超时了, 对的不同的 api server,您说的 api proxy 通过小程序传的不同参数访问不同的 api server 获取数据,然后再通过 api proxy 返回小程序,在 api proxy 返回刀小程序这一阶段超时了。 修改的超时配置师 api proxy 所在的服务器。
|
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 |
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 耗时,在网络非常差、或者数据非常大的情况下,还是有可能出现的。 如果相应的时长已经非常长,建议也可以检查一下各端之间的网络链路质量是否良好。 |
12
also24 2020-03-04 19:21:23 +08:00
最后补充问题:
『数据长的就超时,短的不超时』 是否能提供一下这里长短数据的大致长度(字节数)。 |