创建实时通知系统的不同选项

Posted

技术标签:

【中文标题】创建实时通知系统的不同选项【英文标题】:Different options for creating a real time notification system 【发布时间】:2020-10-17 12:05:39 【问题描述】:

我想创建一个实时通知系统,但不确定最好的架构是什么。

这是我的应用将要经历的旅程。

    React 应用调用 Node 中的 POST API 来更新通知表。

现在这是我不确定的地方。

另一个正在寻找此通知的用户每 10 秒左右不断轮询通知 API 以获取通知,或者我们使用某种 websocket。

我觉得轮询方法会更密集,更难扩展。

在 websocket 中,我基本上计划每 10 秒轮询一次数据库,除非数据库中的触发器可以调用 websocket 等。

对此有什么想法,或者我错过了任何选择吗?

我的技术栈是 Node、React mysql,如果这很重要的话。

【问题讨论】:

【参考方案1】:

关于通知,我不完全确定您想要做什么。对于实时应用程序,我会使用 socket.io。上述通知是否旨在提醒其他用户有新用户加入?如果是这样,那么使用 socket.io 也很容易做到。每次新用户连接到这样的套接字时,您还可以从数据库中检索信息(MongoDB with Mongoose):

mongoose.connect('mongodb://localhost:27017/DBNAME', useNewUrlParser: true, useUnifiedTopology: true);

let exampleSchema = new mongoose.Schema(
  ....
  ....
)
let exampleModel = new mongoose.model("exampleModel", exampleSchema )

mongoose.connect('mongodb://localhost:27017/ExampleDB', useNewUrlParser: true, useUnifiedTopology: true);

每次建立新的套接字连接时,下面的代码都会搜索您的整个数据库。然后它将通知数据发送到所有连接的套接字。

let io = new sio(server);

io.on('connection', (socket) => 
    exampleModel.find(, (err, data)=> 
       const notification = JSON.stringify(data.notification)
       io.emit('notificationFromDB', notification)
      )
    )

也许您可以详细说明您正在尝试做什么,我可以尝试帮助您解决问题。

太平洋标准时间 2020 年 10 月 21 日晚上 9:40 更新:

下面的代码将从客户端接收 bookComment 并将其广播给所有连接的客户端:

    io.on('connection', (socket) => 
      socket.on('bookComment', (comment) => 
        //save comment to database here or perform other operations
        io.emit('broadcastComment', comment)
  )
)

如果您有任何其他问题,请告诉我。

【讨论】:

我正在尝试制作一个移动应用程序,它允许一群人在给定书籍的不同句子下写笔记。我坚持的部分是提出当一个人在书中的一个句子下写笔记时,它应该向其他人发送通知的架构。谢谢!

以上是关于创建实时通知系统的不同选项的主要内容,如果未能解决你的问题,请参考以下文章

我如何通过 django 创建通知系统

通过WebSocket实现实时系统通知,以后再也不能装作没看到老板的通知了~~

Java语言 通过WebSocket实现实时系统通知,以后再也不能装作没看到老板的通知了~~

我们如何为客户获取实时 Instagram 位置通知?

为 HTML5 Django Web 应用程序实现实时通知系统

STM32CubeMX学习笔记(34)——FreeRTOS实时操作系统使用(任务通知)