У меня есть приложение для веб-чата (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 пользователей, и я не думаю, что это для многих или, может быть, потому что у меня есть много пустых комнат, которые пользователи оставляют после отключения?