问题描述
什么是
- 通过服务器上的Nginx或android上的cordova提供角度的前端应用程序
- ASP.NET Core后端,该后端通过Pomelo连接器连接到MysqL数据库。在生产型后端应用程序是通过Nginx反向代理提供的。
问题
从Angular应用发送到api的请求会花费很长时间(一分钟或更长时间),或者在产生大约20-50个请求后完全超时(在我的带有IIS服务器的本地开发环境中,一天可能会发生几次)几天都不会发生。
也许这可以给某人一个线索。我认为问题出在EF查询上,因为我检索了带有其子实体(图片,评论,喜欢,其他与业务相关的实体)的实体。 但是当我关闭有角度的应用程序并再次打开时-再次请求可以正常处理其中的20-50个应用程序。
我还认为这可能是由于DbContext问题引起的,一位开发人员告诉我。
发生的地方
在开发和生产环境上均如此。但是,在生产中会更快地发生。生产服务器具有1GB RAM和相对较慢的cpu(5美元的Digital Ocean Droplet)。
我尝试过的
解决方法
过滤出后端,我意识到瓶颈可能在Angular应用程序的RxJs扩展中。我检查了一下,结果发现,每次导航到新路线时,都会创建可观察到的通知。在20-50次导航事件之后,有20-50个轮询请求将阻止所有内容。重写轮询机制解决了该问题。