【问题标题】:Designing Real Time Web Application设计实时 Web 应用程序
【发布时间】:2018-01-03 09:16:15
【问题描述】:

我们有一个实时应用程序,其中 AppServer(用 c/c++ 编写)用于广播网络事件详细信息 (通常几百到几千行,每秒大约 40-50 列)到用 gtk 编写的客户端 GUI 应用程序 通过网络使用 XML/RPC,以及写入 DB(在同一台机器或 LAN 上运行)。 95% 的通信是从服务器到客户端。 它运行良好,没有任何问题。

我们必须将应用程序移植到 Web。在最初的尝试中,我们保持 C/C++ 应用服务器不变。现在我们将数据发送到 java web 通过 xml/rpc 的应用程序服务器。 Java服务器保持一个循环队列(最初保持2000的小尺寸)并推送数据 通过 websockets 到客户端。在客户端,我们使用角度 ui-grid 来显示数据。

目前的问题是浏览器无法以这种频率处理这么多的数据,并且 一段时间后(几个小时)变得没有反应。这是一个应该 24/7 运行的网络监控应用程序,虽然我们很少 用户,我们对他们机器的配置没有太多控制(主要是低/中端)。服务器(tomcat 8)运行在 2*6 内核、16 GB RAM 上。

您能否就提高浏览器性能提出建议?我们甚至准备从头开始实施新的解决方案。 但我认为浏览器性能永远是瓶颈。

【问题讨论】:

  • 那么您是否经常推送数据(行)以供浏览器显示?在这种情况下,DOM 会不断增长,所以在某些时候,它会变得如此巨大,以至于浏览器无法应对,这很正常。在一页中显示所有 2 亿行是没有意义的。只需在给定时间显示相关信息。
  • 你推荐这个“活动窗口”的尺寸是多少?
  • 我们试图将此大小保持在低至 500 到 1000 行。但是服务器以高速率生成数据,即使这个速率也阻碍了浏览器。系统(或浏览器)必须每秒至少处理几百行。

标签: javascript java websocket real-time xml-rpc


【解决方案1】:

如果推送的数据保存在其他地方,您应该实现一个工作人员来定期清理浏览器数据。

例如,假设您每分钟推送 1000 条记录,并且浏览器在大约一小时的时间段内崩溃,您可以实现一个工作程序,每半小时清理一次浏览器 DOM,以将内存占用保持在其最低。

要访问以前的数据,您应该实现一个 API,用户可以在其中获取给定时间/数据周期的数据。

很难确定导致崩溃的原因,但 IMO 应该是浏览器在一段时间后无法处理的沉重 DOM。最好能提供浏览器崩溃时的详细报告。

【讨论】:

  • 工人,你是指网络工人吗?在这种情况下,它无权访问 DOM
  • 不完全是一个网络工作者,而是一个持续监控你的 DOM 是否过度使用的工作者。
  • 我定期从 JSON 数组中删除行,该数组作为数据数组分配给 UI Grid,以便总行数始终保持在固定数量(300 或 500)。是否足够或者我需要明确清理 DOM?
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 2018-09-13
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
相关资源
最近更新 更多