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

2020-03-04 00:08:23 +08:00
 hytex

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

4068 次点击
所在节点    Java
15 条回复
hytex
2020-03-04 00:15:16 +08:00
并且在访问 A 服务器的 a 接口,无论数据长短都超时, 但在访问 B 服务器的相同接口时,数据长的就超时,短的不超时
sleepm
2020-03-04 00:18:23 +08:00
在请求的时候设置超时时间,一点一点调个合适的
hytex
2020-03-04 00:24:52 +08:00
@sleepm 设置超时时间是在小程序的代理接口这里么, 现目前结构是 小程序这边调用一个代理接口,然后代理接口通过 http 工具类访问需要获取数据的接口。 现在代理接口的 http 工具类已经加上超时时间了, 您的意思我在这个代理接口再设置一个超时时间吗
keepro
2020-03-04 00:30:20 +08:00
1,检查服务端接口超时配置项;
2,查阅相关服务访问日志;
3,使用 winshark 等抓包软件在客户端和服务端抓包,并分析。
cnzjl
2020-03-04 00:32:25 +08:00
设置下请求超时时间,不通过反向代理测试一下,再看看是否设置了报文请求大小。
hytex
2020-03-04 00:44:41 +08:00
@keepro 服务端超时配置我对着网上的一篇文章修改了,时间为 31S 貌似 。其他的两点谢谢提供思路
hytex
2020-03-04 00:45:13 +08:00
@cnzjl 不通过反向代理这个确实还没有试过,谢谢提供思路
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
2020-03-04 16:24:25 +08:00
@also24 小程序请求的超时了, 对的不同的 api server,您说的 api proxy 通过小程序传的不同参数访问不同的 api server 获取数据,然后再通过 api proxy 返回小程序,在 api proxy 返回刀小程序这一阶段超时了。 修改的超时配置师 api proxy 所在的服务器。
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
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
2020-03-04 19:21:23 +08:00
最后补充问题:
『数据长的就超时,短的不超时』

是否能提供一下这里长短数据的大致长度(字节数)。
hytex
2020-03-05 10:07:56 +08:00
@also24 已经解决了…一直着急后端,前端的报错忽视了,通过前端返回的报错知道师 nginx 的临时缓存目录没有权限,不过还是 i 谢谢大佬了,以后如果出现此类情况,可以参照着做一下
also24
2020-03-05 12:10:23 +08:00
@hytex
按你这样的说法,小程序那边不应该返回 『超时』啊
hytex
2020-03-05 13:23:42 +08:00
@also24 这就不清楚了 ,前端那边的错误返回出来是这样…我们也一直纳闷…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/649610

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX