我有一个Web应用程序,它为我们本地网络上的用户提供仪表板类型的显示。它通过AJAX轮询服务器,在许多不同的进程和系统上提供状态更新。我们已经到了服务器上的负载变得太多的地步(它是内存不足的旧硬件)。我们将在接下来的几个月内升级,但我正在考虑从轮询服务器切换到websockets并将事件推送到客户端。
鉴于服务器的请求数量将大幅减少,因为服务器将向客户端推送通知,我认为应该减少服务器负载。这是对的吗?
修改
应用程序使用Laravel framework以PHP编写,并在一组Docker容器上运行,Apache使用ratchet库作为Web服务器来实现websockets的服务器端。从PHP更改为另一个类似节点的实现是不切实际的,但可以更改Web服务器。
答案 0 :(得分:2)
我已经实现了一些推送(websocket)和轮询机制(HTTP),根据我的经验,如果有多个客户端计算机都连续轮询服务器以进行状态更新并且你切换它以便服务器反而激活状态更新到每个客户端时,有一些潜在的好处:
确保您使用的是设计用于处理websocket的Web服务器(一般来说是长连接),我的经验是Tornado,它是非阻塞的,非常适合,但许多Web服务器都可以配置或者可以配置。< / p>
如果您坚持使用轮询,也可以使用一种解决方案(例如,每次更新时缓存仪表板的状态,以便请求只调用静态文件)。但是在回答你的问题时 - 是的,我相信你所提供的描述,你正在考虑的方法会减少开销,可能会大大取决于当前轮询视图的CPU密集程度。