Bri*_*ich 5 javascript networking ruby-on-rails react-native actioncable
前几天,我注意到来自应用程序的一些 API 调用没有被静默执行。我在fetch请求之前和之后注销了 console.log ,瞧,获取上的等待从未完成。
// in an async js function...
let response;
try {
console.log("START")
response = await fetch(url, { headers, method, body });
console.log("END")
} catch (err) {
console.log(err)
}
Run Code Online (Sandbox Code Playgroud)
会结束吗?
在应用程序的日志中,我看到“开始”,但我等了 2-5 分钟,它通常会打印“结束”
是服务器吗?
我怀疑它只是一个缓慢的服务器 API,但是拖尾服务器上的日志,直到“开始”后约 2 分钟,请求才被发送——我看到它在打印时被发送/处理出“结束”
我将 actioncable 连接到 Redis,安装在我的 Rails 应用程序中,通过 Heroku 上的 Puma 提供服务。
我可以重现它吗?
重现它非常困难,但我通常可以通过按下command + RiOS 应用程序模拟器来触发它,这会重新加载应用程序,并启动一些挂起的新 API 请求。
还要别的吗?
我有一个连接到服务器的 websocket 连接。不确定这是否会造成任何干扰。
我试过对 AbortController 使用超时,但它只等待 5 秒然后终止请求(但没有新请求成功)
一旦启动,每个 API 请求都会挂起。
我的问题
更新:好的,也许是我的服务器......?我尝试将 URL 更改为其他网站,但请求似乎已完成。**
更新:好的,我认为是服务器。我尝试了一个curl请求,traceroute然后他们显示出一些东西挂了很长时间......
跟踪路由结果
traceroute to us-east-1-a.route.herokuapp.com (127.0.0.54), 64 hops max, 52 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
(it never ends)
Run Code Online (Sandbox Code Playgroud)
卷曲结果
curl -v https://redacted.herokuapp.com/v3/users/me
* Trying 127.0.0.54...
* TCP_NODELAY set
* Connection failed
* connect to 127.0.0.54 port 443 failed: Operation timed out
* Failed to connect to redacted.herokuapp.com port 443: Operation timed out
* Closing connection 0
curl: (7) Failed to connect to redacted.herokuapp.com port 443: Operation timed out
Run Code Online (Sandbox Code Playgroud)
更新:这变得越来越奇怪。我关闭了我的 iOS 模拟器,让我的电脑休息了 10 分钟。回来了,只是尝试了简单的 curl 请求,它奏效了。启动了 iOS 模拟器,现在我的 curl 请求超时。
更新:我怀疑这与 Heroku 上的 actioncable 阻塞请求有关。尝试禁用所有 websockets 并再次测试。
更新:为了查看它是否是特定于应用程序的,我创建了一个全新的 React Native 应用程序和一个全新的 Rails API。
API 步骤
移动应用程序步骤
componentDidMount以从 Rails API 中获取我彻底输了...
| 归档时间: |
|
| 查看次数: |
500 次 |
| 最近记录: |