使用Node.js向用户发送通知

时间:2019-11-25 16:51:54

标签: node.js notifications

我正在寻找解决问题的方法。我有供我的Web应用程序服务的Node.js服务器,用户可以在其中登录。我想处理一种情况,其中一个用户A执行特定操作,而与此操作相关联的用户B收到真实通知。是否有可以帮助我的模块或其他解决方案?

2 个答案:

答案 0 :(得分:1)

您所描述的是“服务器推送”,其中服务器会主动向其站点上的用户通知某些活动或事件。如今,在网络浏览器世界中,基本上有两种潜在的技术选择:

  1. webSocket(或某些使用socket.io,它是基于webSocket的功能更丰富的库)
  2. server sent events(SSE)。

对于webSocket或socket.io,基本思想是网页通过webSocket或socket.io连接重新连接到服务器。该连接保持活动状态(不同于典型的http连接,该连接将进行连接,发送请求,接收响应然后关闭该连接)。因此,通过该实时连接,服务器可以随时随时向客户端(用户浏览器中的网页)发送通知。然后,网页中的Javascript会侦听连接上的传入数据,然后根据接收到的数据,使用Javascript更新当前显示的网页,以向用户显示一些内容。

对于服务器发送的事件,您可以在客户端打开一个事件源,这还会创建一个到服务器的持久连接,但是此连接仅是单向的(服务器可以将事件发送到客户端),并且它是完全建立在HTTP上。这是比webSocket更新的技术,但用途受到更多限制。

在这两种情况下,服务器都必须跟踪哪个连接属于哪个用户,因此,当服务器上发生有趣的事情时,它可以知道该事件通知哪个连接。


偶尔使用的另一个解决方案是客户端轮询。在这种情况下,网页只是定期向服务器发送ajax调用,询问是否有任何新事件。有什么新鲜事吗?有什么新鲜事吗?有什么新鲜事吗?尽管从概念上讲这比较简单,但除非轮询间隔间隔很远(例如10或15分钟),否则效率通常会大大降低,这限制了任何通知的及时性。这是因为大多数轮询请求(尤其是快速完成的轮询请求)不返回任何数据,而只是浪费了服务器上的周期。

答案 1 :(得分:0)

如果你想通知userB,当你在action中同时在线时,使用websockets传递消息到双向通道通知userB。

如果您想随时通知他们,无论在线状态如何,请使用消息队列。