在 MEAN 应用程序中实现实时通知的最佳方法是什么?

问题描述

我想做一个用户评论和发送消息的应用。但是,这些事件的通知必须立即发送,就像任何其他社交媒体或聊天应用程序一样。这就是我的想法:

  1. Web 前端:Angular,移动:Ioinc with Angular
  2. 后端:Node、Mongo

现在,这就是我想实现实时通知的方式。

  1. 前端(网络和移动应用)与后端之间存在持续的套接字连接。
  2. 每当针对特定用户的消息到达时,我都会使用某种 Mongo-hook 通过套接字连接将通知发送到前端。

现在,这种方法的困惑在于:

  1. 数以百万计的套接字连接是否可以大规模运行?如果没有,实现这种发布-订阅系统的方法是什么?我需要从头开始,而不是使用 Firebase。
  2. 如果用户后台收到消息时离线怎么办?如果套接字未打开,他将如何获取消息?有没有办法使用Kafka来做到这一点?如果您对此有一些想法,请解释一下。

这是正确的方法吗?如果没有,你能建议什么是合适的吗?

解决方法

  1. 数以百万计的套接字连接是否可以大规模运行?如果没有,实现这种发布-订阅系统的方法是什么?我需要从头开始,而不是使用 Firebase。

是的,它可以大规模运行,只是您必须制作这样的架构。你可能会觉得这很有用

  1. Scalable architecture for socket.io
  2. https://socket.io/docs/v3/using-multiple-nodes/
  1. 如果用户在后台收到消息时离线怎么办?如果套接字没有打开,他将如何获取消息?

如果套接字未打开或用户离线,则客户端套接字将断开连接。此时,将不会收到通知,每当用户上线时,您都必须进行 API 调用以获取通知并再次连接到套接字以进行进一步操作。

有没有办法使用 Kafka 来做到这一点?

是的,你也可以用 Kafka 来做。您将需要消费者 API(订阅者)和生产者 API(发布者)

https://kafka.apache.org/documentation/#api

https://www.npmjs.com/package/kafka-node

Sending Apache Kafka data on web page

What do you use Apache Kafka for?

Real time notification with Kafka and NodeJS