【发布时间】:2017-06-25 06:08:08
【问题描述】:
io.on('connection',function(socket){
socket.emit('online');
users.findOne({'username':session.username},function(err,user){
console.log("UPDATING THE CURRENT SOCKEDID ie ! "+" socketidfromDB :
"+user.callsession.socketid+" to cureent socketid : "+socket.id);
user.callsession.socketid=socket.id;
user.save();
});
当我尝试在 socketio 的连接上运行这段代码时,这会自动运行两次并最终将错误的 socketId 保存到数据库。存储的socketId不是当前的socketId,它是别的东西。
发生了什么?
【问题讨论】:
-
您不应该将
socket.id保存在数据库中,因为它会在客户端连接到服务器时发生变化。 -
@MukeshSharma 我正在尝试实现像 Hangouts 这样的呼叫系统,我需要将 socketid 存储到数据库中以便与用户建立呼叫连接,
-
用户断开一段时间后重新连接的情况如何?
-
@MukeshSharma 这不是问题,因为我每次连接时都会更新用户的 socketid。你有没有更好的方法来做到这一点? -
-
是的,您可以将其保存在某些缓存/系统内存中,而不是保存在 mongodb 中,以获得更好的延迟。
标签: node.js express mongoose socket.io