使用 Node.js 向用户发送通知
Sending a notification to user using Node.js
我正在寻找解决问题的办法。我有 Node.js 服务器为我的 Web 应用程序提供服务,用户可以在其中登录。我想处理这样一种情况:一个用户 A 执行特定操作,而与此操作关联的用户 B 收到现实生活中的通知。是否有可以帮助我的模块或其他解决方案?
您所描述的是 "server push" 服务器主动通知其站点上的用户某些 activity 或事件。在如今的网络浏览器世界中,基本上有两种底层技术可供选择:
- webSocket (or some use socket.io,一个构建在 webSocket 之上的功能更丰富的库)
- server sent events(上海证交所)。
对于 webSocket 或 socket.io,基本思想是网页通过 webSocket 或 socket.io 连接回连到服务器。该连接保持活动状态(与典型的 http 连接不同,它会连接、发送请求、接收响应,然后关闭连接)。因此,通过该实时连接,服务器可以随时向客户端(即用户浏览器中的网页)发送通知。网页中的 Javascript 然后侦听连接上的传入数据,并根据接收到的数据使用 Javascript 更新当前显示的网页以向用户显示某些内容。
对于服务器发送的事件,您在客户端打开一个事件源,这也会创建与服务器的持久连接,但这种连接只是单向的(服务器可以向客户端发送事件)并且它完全建立在 HTTP 之上。这是一种比 webSocket 更新的技术,但用途更有限。
在这两种情况下,服务器都必须跟踪哪个连接属于哪个用户,因此当服务器上发生有趣的事情时,它可以知道该事件通知哪个连接。
另一种偶尔使用的解决方案是客户端轮询。在这种情况下,网页只是定期向服务器发送一个 ajax 调用,询问是否有任何新事件。有什么新东西吗?有什么新东西吗?有什么新东西吗?虽然这在概念上有点简单,但通常效率要低得多,除非轮询间隔间隔很远,比如 10 或 15 分钟,这限制了任何通知的及时性。这是因为大多数轮询请求(尤其是快速完成时)return 没有数据,只是在您的服务器上浪费了周期。
如果你想通知userB,当你们两个同时在线时,那么使用websockets传递消息到双向通道通知userB。
如果您想随时通知他们,无论在线状态如何,请使用消息队列。
我正在寻找解决问题的办法。我有 Node.js 服务器为我的 Web 应用程序提供服务,用户可以在其中登录。我想处理这样一种情况:一个用户 A 执行特定操作,而与此操作关联的用户 B 收到现实生活中的通知。是否有可以帮助我的模块或其他解决方案?
您所描述的是 "server push" 服务器主动通知其站点上的用户某些 activity 或事件。在如今的网络浏览器世界中,基本上有两种底层技术可供选择:
- webSocket (or some use socket.io,一个构建在 webSocket 之上的功能更丰富的库)
- server sent events(上海证交所)。
对于 webSocket 或 socket.io,基本思想是网页通过 webSocket 或 socket.io 连接回连到服务器。该连接保持活动状态(与典型的 http 连接不同,它会连接、发送请求、接收响应,然后关闭连接)。因此,通过该实时连接,服务器可以随时向客户端(即用户浏览器中的网页)发送通知。网页中的 Javascript 然后侦听连接上的传入数据,并根据接收到的数据使用 Javascript 更新当前显示的网页以向用户显示某些内容。
对于服务器发送的事件,您在客户端打开一个事件源,这也会创建与服务器的持久连接,但这种连接只是单向的(服务器可以向客户端发送事件)并且它完全建立在 HTTP 之上。这是一种比 webSocket 更新的技术,但用途更有限。
在这两种情况下,服务器都必须跟踪哪个连接属于哪个用户,因此当服务器上发生有趣的事情时,它可以知道该事件通知哪个连接。
另一种偶尔使用的解决方案是客户端轮询。在这种情况下,网页只是定期向服务器发送一个 ajax 调用,询问是否有任何新事件。有什么新东西吗?有什么新东西吗?有什么新东西吗?虽然这在概念上有点简单,但通常效率要低得多,除非轮询间隔间隔很远,比如 10 或 15 分钟,这限制了任何通知的及时性。这是因为大多数轮询请求(尤其是快速完成时)return 没有数据,只是在您的服务器上浪费了周期。
如果你想通知userB,当你们两个同时在线时,那么使用websockets传递消息到双向通道通知userB。
如果您想随时通知他们,无论在线状态如何,请使用消息队列。