2016-04-23 62 views

回答

0

外表此代码:

var io    = require('socket.io')(2558); 

变种短ID =要求( '短ID');

var clients = [];

io.on( '连接',函数(插座){

var currentUser; 

socket.on('USER_CONNECT', function(){ 

    console.log('Users Connected '); 
    for (var i = 0; i < clients.length; i++) { 


     socket.emit('USER_CONNECTED',{ 

      name:clients[i].name, 
      id:clients[i].id, 
      position:clients[i].position 

     }); 

     console.log('User name '+clients[i].name+' is connected..'); 

    }; 

}); 

socket.on('PLAY', function (data){ 
    currentUser = { 
     name:data.name, 
     id:shortId.generate(), 
     position:data.position 
    } 

    clients.push(currentUser); 
    socket.emit('PLAY',currentUser); 
    socket.broadcast.emit('USER_CONNECTED',currentUser); 

}); 

socket.on('disconnect', function(){ 

    socket.broadcast.emit('USER_DISCONNECTED',currentUser); 
    for (var i = 0; i < clients.length; i++) { 
     if (clients[i].name === currentUser.name && clients[i].id === currentUser.id) { 

      console.log("User "+clients[i].name+" id: "+clients[i].id+" has disconnected"); 
      clients.splice(i,1); 

     }; 
    }; 

}); 

socket.on('MOVE', function (data){ 

    // currentUser.name = data.name; 
    // currentUser.id = data.id; 
    currentUser.position = data.position; 

    socket.broadcast.emit('MOVE', currentUser); 
    console.log(currentUser.name+" Move to "+currentUser.position); 


}); 

});

的console.log( “-------服务器正在运行-------”);

0

在最新socket.io,io.socket.clients()需要传递给它一个回调,它将异步调用该回调:

io.socket.clients(function(err, connectedIds) { 
    if (!err) { 
     // connectedIds is an array of connected socket ids 
    } 
}); 

我不知道为什么这个信息是只能通过.clients()作为异步回调,因为如果您查看此函数的代码,那么在检索数据时不会涉及异步操作。也许有一些预期的异步操作,或者它可能与某些事情有关,例如与群集一起使用的redis适配器。


此相同的信息可同步地在一个对象形式:

var clients = io.sockets.connected; 

这将是一个对象,其中所述键是用于每个连接的插座的socket.id和值是插座对象。

所以,你可以同步获取连接插座的ID在同一阵列像这样:

var connectedIds = Object.keys(io.sockets.connected); 

或者,你可以把它转换成连接插座对象的数组是这样的:

var connectedSocketArray = Object.keys(io.sockets.connected).map(function(id) { 
    return io.sockets.connected[id]; 
});