【问题标题】:In my code i am trying to create rooms but i don't know why every time it create old rooms with new one在我的代码中,我正在尝试创建房间,但我不知道为什么每次它都会用新房间创建旧房间
【发布时间】:2018-07-03 16:06:24
【问题描述】:

这是我的 server.js 文件。在这个我在每次创建时创建一个新房间 房间请求,然后将创建的房间推送到房间数组中。 用户名和房间名是通过发布请求形成的。但我不知道为什么它每次都使用新的套接字 ID 创建所有以前的房间 喜欢。如果我第一次给它一个用户名:abc 和房间名:房间1,它会创建一个房间,那么下一次如果我要创建一个房间用户名:abc2 和房间名:房间2 与新的套接字连接,它会再次创建旧房间( username:abc,roomname:room1) 首先增加房间数组长度,然后创建新房间(用户名:abc2,房间名称:房间2)并增加房间数组的长度。

//server.js


const express = require('express');
const app = new express();
const socket = require('socket.io');
const bodyParser = require('body-parser');
const port = process.env.PORT || 8000;
const server = app.listen(port,() =>{
    console.log(`server is running on the port number ${port}`);
})


const io = socket(server);


app.use(express.static(`${__dirname}/public`));
app.set('view engine','ejs');
app.set('views',`${__dirname}/views`);
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
let rooms = [];

function pushRoom(rooms,usernme,roomname){
let room = {
    name:roomname,
    users:[]
}
 room.users.push(usernme);
 rooms.push(room);
} 

function joinRoom(rooms,roomjoinname,username){
for(let i=0 ; i<rooms.length ; i++){
    if(rooms[i].name == roomjoinname){
        rooms[i].users.push(username);
    }
}
}

app.get('/',(req,res,next) =>{
 res.render('index');
})

//taking values from user by post request

    app.post('/chat',(req,res,next) =>{
        io.on('connection',socket =>{
        console.log('made a socket connection'+socket.id);
        let roomName = req.body.roomName;
        let userName = req.body.username;
        let roomNameJoin = req.body.roomNameJoin;
            pushRoom(rooms,userName,roomName);
            socket.join('roomName');
});
res.render('chat');
});

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    重复添加的原因

    这是因为每次用户访问/chat 页面时,您都会向您的 socket.io 服务器添加一个新的侦听器。因此,如果有 3 个用户访问了 /chat 页面,则将为 connection 事件注册 3 个事件侦听器。这意味着当此时将创建一个新的connection 时,将执行 3 个注册的侦听器并将三个新房间推送到您的数组。

    消除不良行为的建议

    将您的房间创建放在 socket.io connection 事件处理程序之外,并将您的 connection 处理程序注册放在您的 HTTP post 处理程序之外。

    app.post('/chat', (req,res,next) => {
      let roomName = req.body.roomName;
      let userName = req.body.username;
      pushRoom(rooms,userName,roomName);
      res.render('chat');
    });
    
    io.on('connection', socket => {
      console.log('made a socket connection'+socket.id);
      socket.join('roomName');
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-09
      • 2012-11-14
      • 2022-10-31
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2022-10-22
      • 1970-01-01
      相关资源
      最近更新 更多