当发送的消息过多时,具有实时消息传递功能的 Web 应用程序会挂起

Posted

技术标签:

【中文标题】当发送的消息过多时,具有实时消息传递功能的 Web 应用程序会挂起【英文标题】:Web app with real-time messaging hangs when too many messages are being sent 【发布时间】:2018-08-08 05:25:46 【问题描述】:

我正在使用 django 频道和 nginx 练习一个群聊应用程序。问题是如果我做一个压力测试,比如 300 个用户会在 2 分钟内在 2-4 秒之间发送消息。具有我们的网络应用程序的选项卡将挂起。我怎样才能防止这种情况? nginx 的 gzip 会有帮助吗?

【问题讨论】:

【参考方案1】:

据我了解,您在 2 分钟内每秒发送大约 100 条消息。

这里可能导致 CPU 过载的主要两件事是:

非常密集的网络流量 呈现所有这些消息的大量 javascript 代码

所以你需要检查他们两个

例如,您可以从检查 JavaScript 部分开始。尝试禁用在 UI 中显示所有传入消息的代码,以便只有网络部分处于活动状态。看看它怎么运作。如果它现在运行良好,那么您需要优化这个 JavaScript 部分,可能会在内存中收集传入消息并在 UI 中每 3 秒而不是每 100/1 秒显示消息。这将节省您的渲染能力。

关于网络部分 - 您可以尝试优化消息负载 - 使其更小。

【讨论】:

你是说我应该只限制默认看到的消息,比如 25 条?因此,如果有一条新消息,那么我将隐藏显示的最旧消息? 现在,我的意思是您应该尽量减少 UI 更改的频率。因为每 q 秒在 UI 中渲染 100 条消息过于频繁 @DeanChristianArmada 欢迎您,让我知道结果或您需要其他帮助 你是对的,所以我们只是将消息最小化到每秒 25 条。

以上是关于当发送的消息过多时,具有实时消息传递功能的 Web 应用程序会挂起的主要内容,如果未能解决你的问题,请参考以下文章

React Native、NodeJS、Socket.io

推送通知不仅从我的设备发送 - 解析

当 RabbitMQ 交换不存在时如何处理错误(并且消息通过消息传递网关接口发送)

Spring MVC 应用程序中用户之间的消息传递

ios通知消息传递状态

Firebase 消息传递 - 当应用程序关闭或在 Flutter 中休眠时不会发送通知