使用本机应用程序随机挂起获取请求

时间:2020-07-14 00:54:47

标签: javascript ruby-on-rails react-native networking 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)
}  

会完成吗?

在该应用的日志中,我看到“ START”,但是我等待2-5分钟,它通常会 打印“ END”

是服务器吗?

我怀疑这只是一个慢速的服务器API,但是将日志记录在服务器上,直到“开始”后约2分钟才发送请求-而且我看到它已经正确发送/处理了当它打印出“ END”时

我已将动作电缆连接到Redis,并安装在我的Rails应用中,并通过Heroku上的Puma提供服务。

我可以复制它吗?

要重现它非常困难,但是我可以通常通过在iOS应用模拟器中按command + R来触发它,它会重新加载应用并启动一些新的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)

卷曲结果

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

更新:这越来越奇怪。我关闭了iOS模拟器,并让计算机休息了10分钟。回来了,只是尝试了简单的curl请求,它就起作用了。触发了iOS模拟器的备份,现在我的curl请求超时。

更新:我怀疑这与Heroku上的可操作电缆阻止请求有关。尝试禁用所有websocket,然后再次测试。


更新:要查看它是否特定于应用程序,我创建了一个全新的react native应用程序和一个全新的Rails API。

API步骤

  • 使用新的my_api --api
  • 删除sqlite3并添加pg gem
  • 更新了database.yml
  • 添加“健康”状态正常的端点(控制器+路由)
  • 部署到heroku

移动应用步骤

  • 创建新的React本机应用
  • componentDidMount中添加setInterval请求以从Rails API中获取
  • 在等待之前和之后放置console.log
  • 在控制台上按刷新(“ r”)刷新应用程序
  • 刷新应用约10次
  • 请求在某个时候挂起

我完全迷失了……

0 个答案:

没有答案