我正在尝试获取从客户端发送的用户名并将其附加到其套接字ID,以便以后在代码中使用。我目前正在尝试使用数组来存储此数据。断开连接时,我希望它从阵列中删除播放器。这是行不通的。我觉得我错误地创建了数组并为数组分配了值。
这是我的服务器端代码(index.js)
var express = require('express');
var socket = require('socket.io');
var people = [];
var app = express();
var server = app.listen(5000, '0.0.0.0', function(){
console.log("connected to port 5000")
});
app.use(express.static('public'));
var io = socket(server);
numUsers = 0;
io.on('connection', function(socket){
console.log('socket connection -', socket.id)
socket.on('nname', function(data){
++numUsers;
io.emit('nname', data);
console.log('new player registered -', data.nickname, numUsers)
people[socket.id] = data.nickname;
console.log(people)
});
socket.on('disconnect', function(){
people.splice(socket.id,1);
console.log('Disconnection', people);
})
});
这是我的客户端代码(answers.js)
var socket = io.connect('localhost:5000');
var nickname = document.getElementById('nickname'),
btn = document.getElementById('submitnickname');
btn.addEventListener('click', function(){
socket.emit('nname', {
nickname: nickname.value
});
document.getElementById('popup').style.display = "none";
document.getElementById('waiting').style.display = "block"
});
这是注册新播放器时获得的控制台输出。
这是玩家断开连接时获得的控制台输出
如您所见,套接字ID和用户名仍在数组中。我究竟做错了什么?有更好的方法吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
您不需要创建单独的数组。您可以像这样在套接字对象上创建一个新属性。
socket.username = "myusername";