javascript - [Socket.io/Node.js] 擷取已連接使用者清單到客戶端
我在使用 socket.io 客戶端時遇到問題,因為我無法在客戶端顯示所有使用者的用戶名列表。我剛接觸 socket.io,但我知道如何在伺服器端編程。我在客戶端編程上遇到困難。我只想在我的 client.html 中顯示已連線使用者的用戶名 <div id="users"></div>。
這是我在 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>
提前感謝。:)
答案#1
當玩家連線或斷線時,你最好的做法是將使用者清單傳回給客戶端。這裡有一些範例程式碼:
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>
