проблема с производительностью в веб-приложении socket.io - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть приложение для веб-чата (nodejs и socket.io), где незнакомые люди могут общаться друг с другом! это как omegle

концепция настолько проста

у меня есть очередь

      socket.on("queue",(data)=>{


            if(queue.length>=1){
                if(data.id!==queue[0].id){


                       //sending note for both of them that they are contected
                        io.to(data.id).emit("joinRoom",{room:queue[0].id+data.id,name:queue[0].name});
                        io.to(queue[0].id).emit("joinRoom",{room:queue[0].id+data.id,name:data.name});

                        inChat[data.id] = queue[0].id+data.id;
                        inChat[queue[0].id] = queue[0].id+data.id;

                       GetUserOutFromQueue(queue[0].id);


                }

            }else{
                queue.push({name:data.name,id:data.id});
                console.log(`user ${data.name} standing in the queue of id of ${data.id}`);
            }
            console.log(`the queue now `)
            console.log(queue);

        })

когда пользователь присоединяется, скрипт соединяет его с другим ожидающим пользователем, они подключаются к одна комната, комната является комбинацией первого идентификатора пользователя и второго идентификатора пользователя.

сторона моего клиента

    socket.on("messageToClient",(data)=>{

            if(data.id==socket.id){
                myMessage(data.message);
            }else{
                hisMessage(data.message,stranger_name);
                $("#userTyping").hide();

            }
            $('#chat_component_p').scrollTop($('#chat_component_p')[0].scrollHeight);
            // $("html, body").animate({ scrollTop: $(document).height()-$(window).height() });

        })

сторона моего клиента, кстати, доза не refre sh когда кто-то перейти к следующему пользователю, он использует тот же сценарий! он просто подписывает переменную комнаты, переменную stranger_name и другие вещи!

доза, которая влияет на процесс?

и когда кто-то уходит, нажав (уйти) (я использую тот же сценарий, если кто-то, если кто-то закрывает браузер («отключение»)

socket.on('otherPeerDisconected',()=>{



    let ChatRoom=inChat[socket.id];


  console.log(inChat);
  socket.to(ChatRoom).emit("getOut");
  delete inChat[socket.id];

  io.of('/').in(ChatRoom).clients(function(error, clients) {
    if (clients.length > 0) {
        console.log('clients in the room: \n');
        console.log(clients);
        clients.forEach(function (socket_id) {
             io.sockets.sockets[socket_id].leave(ChatRoom);
        });
    }
});



  GetUserOutFromQueue(socket.id);
  console.log('the queie now is')
  console.log(queue);


})


когда я проводил собственное тестирование, все было хорошо !! ни единой проблемы! Но когда я загружаю его в Интернет, и люди начинают его посещать! Появляется много проблем!

например! lag, и иногда пользователи получают сообщения от пользователя prevues! хотя я заставляю пользователя выходить из комнаты со стороны сервера

некоторые люди говорили мне, что сторона клиента является частью проблемы Потому что io. должен быть отправлен в отставку, чтобы избежать многократного получения сокетов

, и некоторые люди сказали мне, что это потому, что я использую бесплатный хостинг heroku! хотя проблемы обнаруживаются у 30 пользователей, и я не думаю, что это для многих или, может быть, потому что у меня есть много пустых комнат, которые пользователи оставляют после отключения?

...