2014-09-24 63 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