Javascript Socket.io发射到不存在的房间

Javascript Socket.io发射到不存在的房间,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我正在编写一个游戏并使用socket.io。游戏中的每个地图都由socket.io中的一个房间表示 它是这样工作的。用户运行一个客户端并加入socket.io中的主房间(大厅),它是一个空房间“”,从那里,用户可以创建一个房间,房间ID是数字,从0(0,1,2,3等)开始。当用户加入一个房间时,它会开始一个计时器倒计时,直到当前地图结束 __startTimer:function() { this.__timerId=setInterval(this.__onTimerTick.bin

我正在编写一个游戏并使用socket.io。游戏中的每个地图都由socket.io中的一个房间表示

它是这样工作的。用户运行一个客户端并加入socket.io中的主房间(大厅),它是一个空房间“”,从那里,用户可以创建一个房间,房间ID是数字,从0(0,1,2,3等)开始。当用户加入一个房间时,它会开始一个计时器倒计时,直到当前地图结束

 __startTimer:function()
{
    this.__timerId=setInterval(this.__onTimerTick.bind(this), 1000);
},

__onTimerTick:function()
{
    var string="Timer event in room "+this.__roomId+", list of socket.io rooms:";
    console.log(string);
    console.log(g.socketIo.sockets.manager.rooms);

    this.__duration--;
    g.socketIo.sockets.in(this.__roomId).emit(g.messages.FIGHT_TIMER_TICK_EVENT, {time: this.__duration});
    if(this.__duration==0)
    {
        clearInterval(this.__timerId);
        this.__fightEnd();
    }
},
问题是,当用户关闭他的客户机时,他会离开房间,如果房间里没有更多的用户,它就会被销毁。但当用户再次运行客户端并加入大厅时,socket.io开始向大厅发出计时器事件。所以它发射到了错误的房间

日志:


我认为问题在于:“从0开始”。不要使用0作为房间名称

实际上,这是一个bug(?),您不能使用“Number”作为房间id。只能使用字符串

info: socket.io started
debug: client authorized
info: handshake authorized iFE6tqsa_lThtxv8wsoi
debug: setting request GET /socket.io/1/flashsocket/iFE6tqsa_lThtxv8wsoi
debug: set heartbeat interval for client iFE6tqsa_lThtxv8wsoi
debug: client authorized for 

Timer event in room 0, list of socket.io rooms:
{ '': [ 'iFE6tqsa_lThtxv8wsoi' ],
  '/0': [ 'iFE6tqsa_lThtxv8wsoi' ] }
debug: flashsocket writing 5:::{"name":"104","args":[{"time":179}]}
Timer event in room 0, list of socket.io rooms:
{ '': [ 'iFE6tqsa_lThtxv8wsoi' ],
  '/0': [ 'iFE6tqsa_lThtxv8wsoi' ] }
debug: flashsocket writing 5:::{"name":"104","args":[{"time":178}]}
Timer event in room 0, list of socket.io rooms:
{ '': [ 'iFE6tqsa_lThtxv8wsoi' ],
  '/0': [ 'iFE6tqsa_lThtxv8wsoi' ] }
debug: flashsocket writing 5:::{"name":"104","args":[{"time":177}]}

info: transport end (socket end)
debug: set close timeout for client iFE6tqsa_lThtxv8wsoi
debug: cleared close timeout for client iFE6tqsa_lThtxv8wsoi
debug: cleared heartbeat interval for client iFE6tqsa_lThtxv8wsoi
debug: discarding transport

Timer event in room 0, list of socket.io rooms:
{}
Timer event in room 0, list of socket.io rooms:
{}
Timer event in room 0, list of socket.io rooms:
{}
Timer event in room 0, list of socket.io rooms:
{}

debug: client authorized
info: handshake authorized z540AkrvWAb5X4Lzwsoj
debug: setting request GET /socket.io/1/flashsocket/z540AkrvWAb5X4Lzwsoj
debug: set heartbeat interval for client z540AkrvWAb5X4Lzwsoj
debug: client authorized for 

Timer event in room 0, list of socket.io rooms:
{ '': [ 'z540AkrvWAb5X4Lzwsoj' ] }
debug: flashsocket writing 5:::{"name":"104","args":[{"time":158}]}
Timer event in room 0, list of socket.io rooms:
{ '': [ 'z540AkrvWAb5X4Lzwsoj' ] }