首页 > 解决方案 > 将消息存储在数据库中并使用 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 次,因为每个套接字连接都会查询数据库是否独立?我在这里遗漏了什么吗,有人可以让这个更清楚吗?

标签: node.jssocketswebsocketsocket.iochat

解决方案


推荐阅读