Javascript Socket.io管理室;每个房间允许2人,动态创建新房间
我正在创建一个用户成对交互的应用程序。用户登录后,会自动连接到仅包含一个人的Socket.io文件室,或者如果所有文件室都已满,则根据其用户id创建一个新文件室 我的日子不好过,因为socket.io似乎是根据socket id号创建房间,而不是根据我指定的用户id号创建房间。而且,这很难测试,因为我需要以两个用户的身份登录 server/socket.js: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
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”的文件室在继续之前从未连接。我将从文件室标识符中删除所有空格和冒号,以确保这不是问题