2017-08-11 75 views
0

我是socket.io & nodejs的新用戶。我一直在寫一個tictactoe遊戲,我有一個問題,我的目的是如果有人刷新頁面或關閉瀏覽器讓他/她的對手知道。我知道我應該用斷開事件來做到這一點,這是我的嘗試,但它不工作。無法在socket.io中廣播用戶斷開連接

服務器端

socket.on('disconnect', function() { 
    socket.emit('user:disconnect'); 
}); 

客戶端

socket.on('user:disconnect', function() { 
    var message = player.getPlayerName() + ' leaves'; 
    socket.emit('gameEnded', {room: this.getRoomId(), message: message,id:player.getPlayerId(),gameid: this.getGameId(),winType:"leave"}); 
}); 

另外,我需要知道如何讓斷開的聊天室。 我已經看到this但我只想發送一個房間中的用戶,而不是整個應用程序中的所有用戶。

+0

的[發送響應於除了發送者的所有客戶機]可能的複製(https://stackoverflow.com/questions/10058226/send-response-to-all-clients-except-sender) – mdziekon

回答

0

server.js

socket.on('disconnect', function() { 
    socket.emit('user:disconnect'); 
}); 

在上面的代碼如果名爲用戶「XXX」被斷開,服務器發射「用戶:斷開」給同一個用戶。您必須找到其他播放器的套接字連接並將事件發送到該客戶端。

您可以通過加入房間中的兩個客戶端並將消息發送給房間中的其他用戶來實現您的目標。

socket.join('room1'); 

io.sockets.in('room1').emit('user:disconnect'); 

否則,您必須存儲下面提到的所有客戶端,並使用下面的代碼將消息發送到特定的客戶端。

var users = { 
    'client1': [socket object], 
    'client2': [socket object], 
    'client3': [socket object] 
} 

users['client3'].emit('user:disconnect')