首先请注意误解的标题,但无法让它变得更好。 所以这是我的问题: 我正在使用NodeJS和socket.IO。 我有一个像游戏一样的大厅系统。你创建root,其他人加入等。 我想当房间的主人关闭连接房间应该删除自己。我这样做了
db.game.findOne({ _id: ObjectId(roomId) }, function(err, item)
{
if ( err || !item || item.started )
return;
if ( item.createdBy == currentUser )
{
db.game.remove({ _id: ObjectId(roomId) }, function(err, item) {
io.sockets.in(roomId).emit('force_interupt');
});
}
它正在运作,但我有问题。如果此人只是在浏览器上按REFRESH,则网络服务器(php,nginx,mongod)首先获取游戏的内容 - >显示它,之后游戏被NodeJS删除,因为连接丢失了。 我有什么想法可以避免这种情况吗?
答案 0 :(得分:0)
您对房间生命周期的期望是什么?
如果你想在socket.io连接关闭时关闭房间,你已经得到了你想要的东西。
如果您想在http会话到期时关闭房间,您应该将房间挂钩到会话,这意味着您需要在http会话数据中保存房间信息,并在会话过期时移除房间。< / p>
如果要在socket.io连接关闭时关闭房间,除非连接关闭是由页面重新加载或临时网络问题引起的,您可以这样做: