node.js - 将消息存储在数据库中并使用 socket.io 发出它们的最佳方法是什么?
问题描述
我有一个聊天应用程序,比如 Whatsapp。我正在考虑两种将消息存储在数据库中并发出它们的方法。我现在的方法是客户端发出新消息,服务器正在侦听然后将该消息存储在数据库中并将整个消息返回给服务器。之后服务器向会话/组中的所有客户端发出新消息。所以基本上它服务器首先将消息存储在数据库中,然后将它们发送回客户端。
这是我在服务器上的代码:
//this is just basic example on how it works for now
io.on("connection", socket => {
socket.on("message", async (message) =>{
db.query("call insertnewMessage(params)",(res)=>{
if(res[0]){
socket.emit("newMessage",{newMessage: res[0]});
}
})
}
}
第二种方法是首先用正常的http请求向REST api(不是socket服务器)发送消息,rest api查询数据库插入消息,向服务器返回新消息,服务器向客户端返回整个新消息,然后客户端向socket服务器发出新消息? 在这种方法中,套接字服务器不需要查询数据库,我实际上知道消息已发送(它被插入到数据库中)。
我从某处读到,每个新连接实际上都是服务器上套接字的新实例。如果我有我的示例中的代码,并且每个连接都是新实例,如果我向服务器发送新消息并且有例如 5 个客户端,它会不会在 db 中插入 5 次,因为每个套接字连接都会查询数据库是否独立?我在这里遗漏了什么吗,有人可以让这个更清楚吗?
解决方案
推荐阅读
- python - 多线程是否会导致在 python 中使用更多的 CPU?
- sql-server - 引用从 SELECT 生成的 SQL 列
- asp.net - Azure - 上传的 MVC 项目返回 404
- c++ - c++中的卷积实现
- regex - 使用 TCL 识别列表中的大括号和多个实例
- ruby - 如何删除一个 gem 的多个副本?
- python - 如何使用乌龟将输入键绑定到函数
- python - 关于将日期导出为日期的 xlsxWriter 问题
- react-bootstrap-table - 尝试呈现 react-bootstrap-table TableHeaderColumn 时无法读取未定义的属性“sortFunc”
- node.js - 开玩笑地模拟“fs”模块