socket.io покинуть текущую комнату и присоединиться после нажатия кнопки - PullRequest
0 голосов
/ 07 ноября 2018

мой вопрос о комнатах сокетов, а также об уходе и объединении в комнатах. Моя проблема заключается в том, что я создаю чат и хочу, чтобы пользователь (сокет) нажимал кнопку «следующий человек» (в моем случае ссылка), чтобы сокет отключался (покинуть) свою текущую комнату и присоединиться к другой, где другой сокет ожидает второй сокет. как в Omegle

Заголовок

поэтому я попробовал этот код

на стороне клиента:

 N.addEventListener('click', function(e){
                 socket.emit('next')

});

socket.on('next',function(){
socket.disconnect()
document.GetElementById('divd').style.display = "inline";
socket.connect()
});

на стороне сервера:

       socket.on('next', function(){
        socket.leave(socket.current_room)
        chnm.in(socket.current_room).emit('next');
        socket.join(room)
        });

но всякий раз, когда я нажимаю «далее», он показывает только оба разъёма разъединения сокета, как в событии разъединения, но не позволяет сокету, который вызвал это событие, присоединиться к другой комнате номера в моем случае такие

   var room = "room" + numb;
   socket.current_room = room;

но я хочу показать в комнате (где сокет отсоединен) тот сокет отсоединен и сокет, который вызвал это событие для соединения в другой комнате. (пример: в сокете комнаты 1 сработала «следующая» ссылка, которую он / она отключает от комнаты 1 и присоединяется к комнате 2, а в комнате 1 появляется разъединение div, я думаю, что это все равно появится, если я использую socket.disconnect (), потому что я уже Создано событие отключения. Спасибо, ребята, за помощь <3 </p>

1 Ответ

0 голосов
/ 09 ноября 2018

Там по-прежнему недостаточно кода или недостаточно описанного общего дизайна, которого вы пытаетесь достичь, но вот что я могу увидеть из того, что вы показали до сих пор.

Вот ваша последовательность событий:

  1. Пользователь нажимает кнопку
  2. Код клиента: socket.emit('next')
  3. Сервер получает next сообщение
  4. Сервер звонит socket.leave(socket.current_room), чтобы покинуть текущую комнату
  5. Сервер отправляет .emit('next') всем, кто еще находится в этой комнате
  6. Сервер звонит socket.join(room) (Понятия не имею, откуда берется переменная room)
  7. Клиенты получают сообщение next, в результате чего они socket.disconnect() and then socket.connect () `(понятия не имеют, почему он это делает).

В этой последовательности событий мне кажутся странными следующие вещи:

  1. socket.disconnect(), за которым следует socket.connect(), совершенно не нужен и, вероятно, вызывает проблемы. Во-первых, эти события асинхронны. Если вы действительно хотите сделать одно, а затем другое, вам нужно дождаться завершения разъединения, прежде чем пытаться выполнить повторное соединение. Но, в основном, не должно быть причин для отключения, а затем повторного подключения. Просто обновите состояние соединения, которое у вас уже есть.

  2. Я не понимаю, почему, когда вы назначаете кого-то в новую комнату, вы затем отключаете всех, кто был в этой комнате.

  3. Пожалуйста, не используйте одно и то же имя сообщения next, чтобы означать одно, когда клиент получает его, и что-то совершенно другое, когда сервер получает его. Это не ошибка программирования как таковая, но она действительно затрудняет понимание вашего кода. Дайте каждому свое описательное имя.

...