断开连接之前的NodeJS连接

时间:2013-02-27 16:32:36

标签: node.js connection webserver

首先请注意误解的标题,但无法让它变得更好。 所以这是我的问题: 我正在使用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删除,因为连接丢失了。 我有什么想法可以避免这种情况吗?

1 个答案:

答案 0 :(得分:0)

您对房间生命周期的期望是什么?

如果你想在socket.io连接关闭时关闭房间,你已经得到了你想要的东西。

如果您想在http会话到期时关闭房间,您应该将房间挂钩到会话,这意味着您需要在http会话数据中保存房间信息,并在会话过期时移除房间。< / p>

如果要在socket.io连接关闭时关闭房间,除非连接关闭是由页面重新加载或临时网络问题引起的,您可以这样做:

  1. 定义'quit'命令。在客户端,在关闭之前发送'quit'命令。在服务器端,如果收到“退出”命令,请立即删除该房间。
  2. 如果在没有“退出”命令的情况下关闭连接,请将房间保留一段时间(例如30秒)。如果用户在移除房间之前重新连接,请保留房间。否则,请移除房间。