【问题标题】:I get length 1 even It didn't connect to socket我得到长度 1 即使它没有连接到套接字
【发布时间】:2016-11-11 14:36:39
【问题描述】:
let app = require('express')(),
    http = require('http').Server(app),
    User = require('../models/users');

http.listen(8080, function () {
    console.log('Socket IO server has been started on port 8080');
});

let io = require('socket.io')(http);
var socketRoom = {};

io.of('/chat').on('connection', function (socket) {
    var ioRooms = io.of('/chat').adapter.rooms;
    console.log(ioRooms) // I got length 1 when I print it.
    socket.on('requestRandomChat', function (data) {
        User.findOne({userToken : data.userToken}, function(err, user){
            if(err) socket.emit('db error');
            if(!user) socket.emit('db error : user not found');
            else {
                socket.emit('responseUserProfile', user);
                for (var key in rooms){
                    if (key == ''){
                        continue;
                    }
                    if (rooms[key].length == 1){
                        var roomKey = key.replace('/', '');
                        socket.join(roomKey);
                        io.sockets.in(roomKey).emit('completeMatch', {});
                        socketRoom[socket.id] = roomKey;
                        return;
                    }
                }
                socket.join(user.userToken);
                socketRoom[user.userToken] = socket.userToken;
            }
        });
    });

    socket.on('cancelRequest', function (data) {
        socket.leave(socketRoom[socket.id]);
        console.log(ioRooms);
    });

    socket.on('sendMessage', function (data) {
        console.log(ioRooms);
        console.log('sendMessage!');
        io.of('/chat').in(socketRoom[socket.id]).emit('receiveMessage', data);
    });

    socket.on('disconnect', function (data) {
        console.log(ioRooms);
        var key = socketRoom[socket.id];
        socket.leave(key);
        io.of('/chat').in(key).emit('disconnect');
        var clients = io.of('/chat').clients(key);
        for (var i = 0; i < clients.length; i++) {
            clients[i].leave(key);
        }
    });
});

当我尝试获得一定长度的房间时,我得到一个带有 socketId 的长度 1。 但我从来没有连接到房间。是默认房间吗?有人可以解释房间插座发生了什么吗?

//{ '/chat#2HAMaavywIwZ1B5fAAAD': 房间 { 套接字: { '/chat#2HAMaavywIwZ1B5fAAAD': true }, 长度: 1 } }

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    在socket io中,每个socket都会自动连接到一个由socket ID标识的默认房间。

    这就是长度为 1 的原因。

    希望对您有所帮助。 http://socket.io/docs/rooms-and-namespaces/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 2018-06-27
      相关资源
      最近更新 更多