我有一个聊天应用,比如 Whatsapp。我正在考虑两种在 db 中存储消息并发出它们的方法。我现在的方法是客户端发出新消息,服务器正在侦听然后将该消息存储在数据库中并将整个消息返回给服务器。之后服务器向会话/组中的所有客户端发出新消息。所以基本上它服务器首先将消息存储在数据库中,然后将它们发送回客户端。
这是我在服务器上的代码:
//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查询数据库插入消息,向服务器返回新消息,服务器向客户端返回全新消息,然后客户端发出新消息到套接字服务器?在这种方法中,套接字服务器不需要查询 db,我实际上知道消息已发送(它被插入到 db 中)。
我从某处读到每个新连接实际上都是服务器上套接字的新实例。如果我有我的示例中的代码,并且如果每个连接都是新实例,那么如果我向服务器发送新消息并有 5 个客户端,它会在 db 中插入 5 次,因为每个套接字连接都会查询数据库是否独立?我是否在这里遗漏了什么,有人可以更清楚地说明这一点。