为什么对不同的ASP.NET Core端点发出约20个请求后,Angular应用程序HTTP请求会挂起?

问题描述

什么是

  1. 通过服务器上的Nginx或android上的cordova提供角度的前端应用程序
  2. ASP.NET Core后端,该后端通过Pomelo连接器连接到MysqL数据库。在生产型后端应用程序是通过Nginx反向代理提供的。

问题

从Angular应用发送到api的请求会花费很长时间(一分钟或更长时间),或者在产生大约20-50个请求后完全超时(在我的带有IIS服务器的本地开发环境中,一天可能会发生几次)几天都不会发生。

也许这可以给某人一个线索。我认为问题出在EF查询上,因为我检索了带有其子实体(图片评论,喜欢,其他与业务相关的实体)的实体。 但是当我关闭有角度的应用程序并再次打开时-再次请求可以正常处理其中的20-50个应用程序。

我还认为这可能是由于DbContext问题引起的,一位开发人员告诉我。

发生的地方

在开发和生产环境上均如此。但是,在生产中会更快地发生。生产服务器具有1GB RAM和相对较慢的cpu(5美元的Digital Ocean Droplet)。

我尝试过的

  1. 根据here
  2. 所述的最佳做法重写了EF查询

解决方法

过滤出后端,我意识到瓶颈可能在Angular应用程序的RxJs扩展中。我检查了一下,结果发现,每次导航到新路线时,都会创建可观察到的通知。在20-50次导航事件之后,有20-50个轮询请求将阻止所有内容。重写轮询机制解决了该问题。