簡體   English   中英

在我的代碼中,我試圖創建房間,但我不知道為什么每次使用新房間創建舊房間時

[英]In my code i am trying to create rooms but i don't know why every time it create old rooms with new one

這是我的server.js文件。 在這種情況下,我將在每個創建房間的請求上創建一個新房間,然后將創建的房間推入Rooms數組。 用戶名和房間名是通過post request.Form來獲取的,但是我不知道為什么每次使用新的套接字ID都會創建所有以前的房間。 如果我第一次給它提供一個用戶名:abc和roomname:room1,它將創建一個房間,然后如果我下次使用新的套接字連接創建一個房間用戶名:abc2和roomname:room2,那么它將再次創建舊房間(用戶名:abc,房間名稱:room1),然后增加房間陣列的長度,然后創建新房間(用戶名:abc2,房間名稱:room2),並增加房間陣列的長度。

//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');
});

重復添加的原因

這是因為每次用戶訪問/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');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM