Node.js 设计方法。服务器定期从客户端轮询

Node.js design approach. Server polling periodically from clients

我正在尝试学习 Node.js 和适当的设计方法。

我实现了一个小型 API 服务器(使用 express),它从多个远程服务器获取一组数据站点,根据使用 API.

的客户请求

这个过程可能需要一些时间(几个 fecth / await), 所以我想让用户知道他的请求是怎么做的。我读过 socket.io / websockets 但对于这种情况,这可能有点矫枉过正。

所以我做的是:

尽管该解决方案工作正常,即使有多个客户端同时连接,也许有更好的解决方案?。有没有我没有考虑的注意事项?

TL;DR 您使用的方法很好,尽管它可能无法很好地扩展。 Websockets 是解决同一问题的不同方法,但同样,可能无法很好地扩展。

您已经确定了网站上 real-time(或接近它)更新的基本仅有的两个选项:

  1. 轮询服务器 - 客户端定期请求信息
  2. 使用 Websockets - 服务器可以在发生某些事情时将更新推送到客户端

有几件事需要考虑。

  1. “实时”更新有多重要?如果用户可以等待几秒钟(或更长时间),则进行轮询。
  2. 服务器可以处理什么样的负载?如果负载是一个问题,那么 Websockets 可能是可行的方法。

最后一个问题才是问题的症结所在。如果您希望有几个或几十个客户端使用此功能,那么任何一种解决方案都可以正常工作。

如果您希望连接数千或更多,那么轮询开始成为一个问题,因为现在我们正在谈论对服务器的许多重复请求。当然,如果间隔时间长点,负载会低一些。

据我了解,Websockets 的开销较低,但当您谈论大量客户端时,这仍然是一个问题。同样,很多客户端意味着服务器正在管理大量打开的连接。

大型服务处理此问题的方式是设计它们的应用程序,使它们可以分布在许多相同的服务器上,并且您连接到的服务器由负载平衡器管理。对于轮询或 Websockets 都是如此。