2013-10-09 3 views
3

У меня проблема с клиентом socket.io, потому что я не могу показать список всех пользователей пользователя в моем клиенте. Я просто новый в socket.io, и я знаю, как кодировать на стороне сервера. У меня трудности с программированием на стороне клиента. Все, что я просто хочу сделать, это показать подключенное имя пользователя пользователя в моем client.html <div id="users"></div>.[Socket.io/Node.js]Retrieving список подключенных пользователей к клиенту

Вот некоторые из моего кода в server.js

var users = []; 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.sockets.on('connection', function (socket) { 

    socket.on('adduser', function (user) { 
     socket.user = user; 
     users[user] = user; 
     console.log(users); 
    }); 

    socket.on('disconnect', function() { 
     console.log('User: ' + users[socket.user] + ' has disconnected'); 
     delete users[socket.user]; 
     console.log(users) 
    }); 

    socket.on('update', function() { 
     users[user] = user; 
     console.log('Current users: ', users); 
    }); 
}); 
}); 

Вот мой простой client.html вставить имя пользователя в массив users[]

<html> 
<script src="/socket.io/socket.io.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8080'); 

socket.on('connect', function(){ 
     socket.emit('adduser', prompt("What's your name?")); 

</script> 
<div style="float:left;width:150px;border-right:2px solid black;height:510px;padding:10px;overflow:scroll-y;text-align:center;"> 
    <b>Users</b> 
    <div id="users"></div> 
</div> 
</html> 

Заранее спасибо , :)

ответ

5

Ваш лучший выбор - это вернуть клиентам список пользователей, когда игрок подключится или отключится. Вот несколько примеров кода:

var users = []; 

app.get('/', function (req, res) { 

res.sendfile(__dirname + '/test.html'); 
    }); 

io.sockets.on('connection', function (socket) { 

    socket.on('adduser', function (user) { 
     socket.user = user; 
     users.push(user); 
     updateClients(); 
    }); 

    socket.on('disconnect', function() { 
     for(var i=0; i<users.length; i++) { 
      if(users[i] == socket.user) { 
       delete users[users[i]]; 
      } 
     } 
     updateClients(); 
    }); 

    function updateClients() { 
     io.sockets.emit('update', users); 
    } 

}); 

И в коде клиента:

<script src="/socket.io/socket.io.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8080'); 

    socket.on('connect', function(){ 
     socket.emit('adduser', prompt("What's your name?")); 
    }); 

    var userList = []; 

    socket.on('update', function (users){ 
     userList = users; 
     $('#user').empty(); 
     for(var i=0; i<userList.length; i++) { 
      $('#user').append("<h1>" + userList[i] + "</h1>"); 
     } 
    }); 
</script> 
<div style="float:left;width:100px;border-right:1px solid black;height:300px;padding:10px;overflow:scroll-y;"> 
    <b>Users</b> 
    <div id="users"> 
     <p id="user"></p> 
    </div> 
</div> 
+0

Привет, помните, однако, что на стороне сервера после удаления, если вы пытаетесь получить общее подключенных пользователей по users.length, считают фильтруя массив раньше, так как он даст максимальный индекс + 1, и это может быть или не быть правильным количеством пользователей в этом случае. – vbrmnd

+0

Как мы можем это исправить? Есть ли другой путь? –

+0

Это все еще не обновляет пользователей на клиенте и ничего не показывает. –

Смежные вопросы