Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.io管理室;每个房间允许2人,动态创建新房间_Javascript_Node.js_Websocket_Socket.io - Fatal编程技术网

Javascript Socket.io管理室;每个房间允许2人,动态创建新房间

Javascript Socket.io管理室;每个房间允许2人,动态创建新房间,javascript,node.js,websocket,socket.io,Javascript,Node.js,Websocket,Socket.io,我正在创建一个用户成对交互的应用程序。用户登录后,会自动连接到仅包含一个人的Socket.io文件室,或者如果所有文件室都已满,则根据其用户id创建一个新文件室 我的日子不好过,因为socket.io似乎是根据socket id号创建房间,而不是根据我指定的用户id号创建房间。而且,这很难测试,因为我需要以两个用户的身份登录 server/socket.js: module.exports = function (io) { io.sockets.on('connection', fun

我正在创建一个用户成对交互的应用程序。用户登录后,会自动连接到仅包含一个人的Socket.io文件室,或者如果所有文件室都已满,则根据其用户id创建一个新文件室

我的日子不好过,因为socket.io似乎是根据socket id号创建房间,而不是根据我指定的用户id号创建房间。而且,这很难测试,因为我需要以两个用户的身份登录

server/socket.js:

module.exports = function (io) {
    io.sockets.on('connection', function (socket) {
        socket.emit('message', {message: "Waiting for player..."})
        socket.on('create', function (newRoom) {
            var rooms = io.sockets.adapter.rooms;
            var clients = function (rm) {
                return io.of('/').adapter.rooms[rm];
            };

            // if any of the current rooms have only one
            // player, join that room.
            for (room in rooms) {
                console.log(room)
                if (Object.keys(clients(room)).length == 1) {
                    socket.join(room);

            } else {
                socket.join(newRoom);
            }
        }
    })
    })

}
client/sockets.js:

window.onload = function () {
    var socket = io.connect('http://localhost:3700');
    var messageBox = document.getElementById('message_box');

    socket.on('message', function (data) {

            console.log(data);
            console.log(data.message);
            messageBox.innerHTML = data.message;


    });

    socket.emit('create', 'ROOM: ' + loggedInUser._id);
}

那么你的问题是什么?(请注意添加您正在使用的socket.io版本)我正在使用最新版本。我想我只是需要一些关于如何使它工作的指针和指导,因为我不能完全理解iTroom不是显式创建的。你只要
.join(newRoomName)
就可以了。此外,名称空间与房间无关。我看到(“/”)的
用法,但是没有看到它有任何显著的影响。。。因此,我不认为代码中有任何问题。您可能需要调试它,并观察房间是否正确连接。我不确定是否以房间的名义使用
,但我怀疑这是个问题……谢谢。一个问题是,名为“room:ID”的房间在继续之前从未连接。我将从房间标识符中删除所有空格和冒号,以确保这不是问题。您的问题是什么?(请注意添加您正在使用的socket.io版本)我正在使用最新版本。我想我只是需要一些关于如何使它工作的指针和指导,因为我不能完全理解iTroom不是显式创建的。你只要
.join(newRoomName)
就可以了。此外,名称空间与房间无关。我看到(“/”)的
用法,但是没有看到它有任何显著的影响。。。因此,我不认为代码中有任何问题。您可能需要调试它,并观察房间是否正确连接。我不确定是否以房间的名义使用
,但我怀疑这是个问题……谢谢。一个问题是,名为“room:ID”的文件室在继续之前从未连接。我将从文件室标识符中删除所有空格和冒号,以确保这不是问题