socket.io случайный чат один на один - PullRequest
0 голосов
/ 28 октября 2018

поэтому есть мой код, я пытаюсь создать чат с Socket.io с комнатами (случайный чат один на один), но я думаю, что есть ошибка, потому что, когда я соединяю первые два сокета, он работает отлично, но когда я соединяю третийСокет, он больше не работает, я думаю, что это из-за "онемения ++", но я не знаю, как это исправить, потому что у меня не так много опыта в комнатах.Я хочу реализовать: чат между двумя сокетами, и когда присоединяется третий клиент, я хочу создать вторую комнату и ждать, пока четвертый сокет присоединится к чату и т. д., и я знаю, что хочу один-на-один случайный чат, такой как Omegle.

 var numb = 1;
 var chnm = io.of('/STchat')

 app.get('/STchat', function(req, res){

res.sendFile('C:\\Users\\tuna\\Desktop\\JUSTFOL\\views\\Tchat.html')

chnm.once('connect', function(socket){
  socket.join("room" + numb)
  console.log('made socket connection', socket.id);
chnm.in("room" + numb).clients(function(err, clients){
      if(clients.length > 2) {

     numb++
      }
});
socket.on('chat', function(data) {
 chnm.in("room" + numb).emit('chat',data)

  })
  socket.on('disconnect', function(){
    console.log('socket disconnected')
  });

}
});
app.get('/StvChat', function(req ,res){
res.sendFile(__dirname + '/views/VideoC.html');


});









var socket = io.connect('http://localhost:5000/STchat')

var message = document.getElementById('message');
handle = document.getElementById('handle');
btn = document.getElementById('send');
output = document.getElementById('output');
typing = document.createElement('p');
typing.className = "tycl";
input = document.getElementById("message");

$('form').submit(function(){


    socket.emit('chat',{
        message: message.value,

    });
    $('#message').val('');
    return false;
});
input.addEventListener("keyup", function(event) {
       event.preventDefault();

    if (event.keyCode === 13) {

      document.getElementById("send").click();
    }
  });

socket.on('chat', function(data){
  output.innerHTML += '<p>' +'  '+ data.message +'</p>' 
});

1 Ответ

0 голосов
/ 29 октября 2018

Это было слишком долго, чтобы уместиться в комментариях, поэтому я добавил в качестве ответа.Чтобы уточнить, вот проблема, которую я вижу в том, как вы запускаете событие чата.Давайте пройдемся по сценарию.

var numb = 1;

Два пользователя (Пользователь A и Пользователь B) подключаются к сокету и помещаются в комнату "room1".Теперь онемение должно быть увеличено на ваш код, и теперь онемение будет равно == 2.

Теперь пользователь A (который находится в "room1") генерирует событие "chat".Вот проблема, которую я вижу:

socket.on('chat', function(data) {
    chnm.in("room" + numb).emit('chat', data)

})

Событие чата пользователя A отправлено в "room2", но пользователь A находится в "room1".Это происходит потому, что онемение == 2 в этой точке сценария, и вы используете онемение для генерации этого события, в основном это то, что происходит chnm.in("room" + 2).Пользователь B не получает излучение пользователя A, поскольку оно было отправлено не в ту комнату (room2).Если я неправильно понял, что вы пытаетесь сделать, пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ: В соответствии с просьбой, здесь приведены некоторые модификации вашего кода, которые я успешно проверил локально.Два пользователя в каждой комнате.

var numb = 1;
var chnm = io.of('/STchat');

app.get('/STchat', function(req, res) {

    res.sendFile('C:\\Users\\tuna\\Desktop\\JUSTFOL\\views\\Tchat.html');

    chnm.once('connect', function(socket) {

        // store the room in a var for convenience
        var room = "room" + numb;

        // join socket to the next open room
        socket.join(room);

        // store room on socket obj for use later - IMPORTANT
        socket.current_room = room;

        // log some stuff for testing
        console.log('made socket connection', socket.id);
        console.log("Joined room: ", socket.current_room);

        // Check room occupancy, increment if 2 or more
        chnm.in(room).clients(function(err, clients) {
            if (clients.length >= 2) {
                numb++;
            }
        });

        socket.on('chat', function(data) {
            // emit to that sockets room, now we use that current_room
            chnm.in(socket.current_room).emit('chat', data);
        });

        socket.on('disconnect', function() {
            console.log('socket disconnected');
        });
    });

});

app.get('/StvChat', function(req, res) {
    res.sendFile(__dirname + '/views/VideoC.html');
});
...