2014-09-24 67 views
0

我想告诉其他客户在房间里,当有人被断开连接。广播到房间不工作断开

这里是我的代码:

socket.on('disconnect', function(){ 
    var user = authedUsers[socket.id]; 
    socket.broadcast.to(user.room).emit('message', {user: user, message: user.display_name + ' has been disconnected.'}); 
}); 

但我收到此错误:

RangeError: Maximum call stack size exceeded 
npm ERR! weird error 8 
npm WARN This failure might be due to the use of legacy binary "node" 
npm WARN For further explanations, please read 
/usr/share/doc/nodejs/README.Debian 

npm ERR! not ok code 0 
+0

可能是错的,但我认为,当有人断开事件被调用,套接字已断开。但错误是关于调用堆栈的大小,所以它可能在代码中的其他地方,你确定这里发生了错误吗? – DrakaSAN 2014-09-24 12:00:56

+0

是的,我认为是。因为错误只发生在处理这个部分:socket.broadcast.to(user.room).emit('message',{user:user,message:user.display_name +'has been disconnected。'}); – 2014-09-24 12:08:27

+0

调用堆栈大小就像一个堆栈溢出错误,表示您正在调用很多次(现实中太多)的函数。你能发布你的完整代码来帮助我们理解吗?你的user.room真的存在吗? – mfrachet 2014-09-24 12:26:03

回答

0

的错误是,当事件断开被调用,套接字已关闭。

所以当你调用buggy行时,它会搜索发送一个封闭的套接字,并由于某种原因最终导致调用堆栈溢出。

你应该deconnecting套接字之前发送deconnection的消息:)

+0

谢谢你让我意识到这一点。我现在正在使用io.sockets.in(user.room).emit():) 但现在你让我好奇,是否有可能在socket.on('disconnect')之前发送断开连接的消息?是否存在预先断开连接? :D – 2014-09-24 13:01:55

+0

好吧,如果你能找到插座断开的位置和原因,你应该可以发送信息,是的。当用户希望断开连接时,我会开始。 – DrakaSAN 2014-09-24 13:05:49