将用户名分配给Socket.io ID

时间:2018-12-03 21:49:08

标签: javascript socket.io

我正在尝试获取从客户端发送的用户名并将其附加到其套接字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"
});

这是注册新播放器时获得的控制台输出。 console output on player username assignment
这是玩家断开连接时获得的控制台输出 console output on player disconnect
如您所见,套接字ID和用户名仍在数组中。我究竟做错了什么?有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

people.splice(socket.id,1);行替换为:

delete people[socket.id];

这与enumerable properties

有关

答案 1 :(得分:1)

您不需要创建单独的数组。您可以像这样在套接字对象上创建一个新属性。

socket.username = "myusername";