创建实时通知系统的不同选项
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)
)
)
如果您有任何其他问题,请告诉我。
【讨论】:
我正在尝试制作一个移动应用程序,它允许一群人在给定书籍的不同句子下写笔记。我坚持的部分是提出当一个人在书中的一个句子下写笔记时,它应该向其他人发送通知的架构。谢谢!以上是关于创建实时通知系统的不同选项的主要内容,如果未能解决你的问题,请参考以下文章
通过WebSocket实现实时系统通知,以后再也不能装作没看到老板的通知了~~
Java语言 通过WebSocket实现实时系统通知,以后再也不能装作没看到老板的通知了~~