我如何获得一个socket.username?(socket.io)

vag*_*und 2 javascript node.js socket.io web

我想写一个简单的聊天以获得实际经验。

好的,但是我无法获得socket.nickname来通知从房间加入/离开房间。(当我尝试通过它时,他总是为“未定义”感到难过)。

现在好了,尝试创建房间列表

更新代码:

client.js:

$('#roomForm').submit(function() {
    socket.emit('createRoom', $('#roomName').val());
    $('#roomForm').hide();
    $('#chatForm').show();
    return false;
});

socket.on('message', function(data) {
    newMessage(data);
});

socket.on('showRooms', function(rooms) {
    console.log(rooms);
    for(var i = 0; i < rooms.length; i++) {
        $('#rooms').append($('<li>')
                        .append($('<form id="freeRoom">')
                            .append($('<span id="room">').text(rooms[i] + ' ///'))
                            .append($('<button>').text('connect'))));
    };
});

$('#freeRoom').submit(function() {
    socket.emit('connectToRoom', $('#room').text());
    return false;
});
Run Code Online (Sandbox Code Playgroud)

server.js:

io.on('connection', function(socket) {
    socket.on('sendNickname', function(username) {
        socket.username = username;
        users.push(socket.username);
        socket.emit('showRooms', rooms);
    });

    socket.on('disconnect', function() {
        socket.broadcast.to(socket.room).emit('notice', socket.username + ' has left the room');
        users.splice(users.indexOf(socket.username), 1);
        socket.emit('showRooms', rooms);
    });

    socket.on('message', function(data) {
        socket.broadcast.to(socket.room).emit('message', data);
    });

    socket.on('createRoom', function(room) {
        socket.leave(socket.room);
        socket.room = room;
        rooms.push(socket.room);
        socket.join(socket.room);
        socket.emit('showRooms', rooms);
        console.log('Rooms: ' + rooms);
        socket.broadcast.to(socket.room).emit('notice', socket.username + ' has joined to room');
    });

    socket.on('connectToRoom', function(room) {
        console.log('Will connect to that room: ' + room);
        socket.join(room);
    });
});
Run Code Online (Sandbox Code Playgroud)

** UPD 2:**试图连接免费创建的房间:

$('#freeRoom').submit(function() {
    socket.emit('connectToRoom', $('#room').text());
    return false;
});
Run Code Online (Sandbox Code Playgroud)

PS还有...对不起,我的英语>。<

mis*_*321 7

您发出的事件名称“ connect”“ message”“ disconnect”一起保留在Socket.io中

http://socket.io/docs/#sending-and-receiving-events

Socket.IO允许您发射和接收自定义事件。除了 connectmessage断开连接,您还可以发出自定义事件:
...

将其更改为其他内容,例如:

Server.js:

io.on('connection', function(socket) {
socket.on('send-nickname', function(nickname) {
    socket.nickname = nickname;
    users.push(socket.nickname);
    console.log(users);
});
...
Run Code Online (Sandbox Code Playgroud)

Client.js

socket.emit('send-nickname', nickname);
Run Code Online (Sandbox Code Playgroud)

  • 看来,当所有用户都离开房间时,房间确实会被自动删除:http://stackoverflow.com/a/8750801/4228291 (2认同)