如何允许socket.io用户加入具有多个名称空间的文件室?

如何允许socket.io用户加入具有多个名称空间的文件室?,socket.io,namespaces,chatroom,Socket.io,Namespaces,Chatroom,我在服务器端有一个socket.js文件,我希望将我的用户通信划分为不同的名称空间,即 this.mainRoom = io.of('/main_room') this.privateRoom = io.of('/private_room') 当用户加入特定于“/main\u room”命名空间的文件室时,它可以正常工作。 但是我希望用户能够加入'/private\u room'名称空间。 这是密码 const socks = function (io) { let self = this s

我在服务器端有一个socket.js文件,我希望将我的用户通信划分为不同的名称空间,即

this.mainRoom = io.of('/main_room')
this.privateRoom = io.of('/private_room')
当用户加入特定于“/main\u room”命名空间的文件室时,它可以正常工作。 但是我希望用户能够加入'/private\u room'名称空间。 这是密码

const socks = function (io) {
let self = this
self.privateRoom = null

// where all the messaging and the events that are not part of the
// user-to-user communication
this.mainRoom = io.of('/main_room')
this.mainRoom.on('connection', (socket) => {
    socket.on('set_name', (data) => {
        const nickname = data.name
        socket.nickname = nickname
        socket.emit('name_set', data)
        socket.send(JSON.stringify({
                type: 'serverMessage',
                nickname: socket.nickname,
                message: "Welcome! "
            })
        )
        socket.broadcast.emit('user_entered', {
            nickname: socket.nickname,
        })
    })
    socket.on('join_room', (room) => {
        //  concept roomname !== namespace
        //  concept Rooms are subchannels of the namespaces.

        //create another socket,  since socketio doesnt allow a single socket
        //to be connected to multiple namespaces
        socket.join(room.name, () => {
        ---------->> how do i allow user to join the room in the private_room namespace? <<---------
        ---------->> how should i create socket2 to join the same room.name? <<----------
            // let socket2 = self.privateRoom.sockets[socket.id]
            // socket2.join(room.name)
        })
    })
})

// split the socket code into 2 separate parts for namespaces
// this is so that the messaging and events that are related to users
// are in a namespace
// while messaging and events that are not part of user-to-user
// communication is separated 
this.privateRoom = io.of('/private_room')
this.privateRoom.on('connection', (socket) => {
    socket.on('message', (message) => {
        message = JSON.parse(message)
        if (message.type === "userMessage") {
            socket.in(socket.room).broadcast.send(JSON.stringify(message))
            message.type = "myMessage"
            socket.send(JSON.stringify(message))
        }
    })
})
const socks=函数(io){
让self=这个
self.privateRoom=null
//其中,所有不属于
//用户对用户通信
this.mainRoom=io.of(“/main_room”)
this.mainRoom.on('连接',(插座)=>{
socket.on('set_name',(数据)=>{
const昵称=data.name
socket.昵称=昵称
socket.emit('name_set',data)
send(JSON.stringify({
键入:“serverMessage”,
昵称:socket.昵称,
信息:“欢迎!”
})
)
socket.broadcast.emit('user_entered'{
昵称:socket.昵称,
})
})
插座开('join_room',(room)=>{
//概念roomname!==名称空间
//概念室是名称空间的子通道。
//创建另一个套接字,因为socketio不允许使用单个套接字
//连接到多个名称空间
socket.join(room.name,()=>{
---------->>如何允许用户加入private_room命名空间中的文件室?如何创建socket2以加入相同的room.name{
message=JSON.parse(message)
如果(message.type==“userMessage”){
socket.in(socket.room).broadcast.send(JSON.stringify(message))
message.type=“myMessage”
socket.send(JSON.stringify(message))
}
})
})
}啊!愚蠢的错误

只需将这个.privateRoom的套接字重命名为socket2,并使其成为一个全局变量

self.socket2 = null


this.privateRoom = io.of('/private_room')
this.privateRoom.on('connection', (socket2) => {
    self.socket2 = socket2
    self.socket2.on('message', (message) => {
        message = JSON.parse(message)
        if (message.type === "userMessage") {
            self.socket2.in(self.socket2.room).send(JSON.stringify(message))
            message.type = "myMessage"
            self.socket2.send(JSON.stringify(message))
        }
    })
})
把它还给主控室

let socket2 = self.socket2.join(room.name)
socket2.room = room.name
socket.in(room.name).emit('user_entered', {'name': socket.nickname})