2017-08-11 34 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')