客户端如何知道基于 Web 的聊天应用程序是否有新消息?

How could a client know if new messages are there for it for a web based chat app?

我正在开发一个使用 NodeJS 作为后端并使用 MongoDB 的聊天应用程序。我设计了用于存储每个客户端之间消息的数据库。但是就在那时,我不知道如何通知客户端有新消息。

如果客户端登录,则客户端可以发送 API 请求以获取最新消息。但是,如果客户端保持登录状态,并且传递了针对该客户端的新消息,则服务器会将它们记录在数据库中,但在它请求之前无法通知它(通过重新加载页面或其他方式)。这是如何实现的?

我正在考虑不断轮询服务器以获取新消息,但那不是很多请求吗?我希望可以有一些更好的方法来实现这一点。我是网络开发的新手,这是我的第一个项目。

我认为您可以将套接字 IO、XMPP 协议...用于实时 Web 客户端。 link reference

最佳解决方案是使用 websocket 服务器从服务器接收消息。
当然你也可以用它来发消息。

如果您不想或不能使用 websocket 连接,您可以使用 SSE - 服务器站点事件。
详情请看这里:https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events

也可以不断地汇集消息。 这是在 websocket 时代之前许多聊天应用程序中使用的很好的老技术。 它被称为“长池”,但 SSE 是当今最新、更方便且通常更好的技术。 详情请看这里:https://javascript.info/long-polling