Можно ли сократить этот простой код номера сокета?

#node.js #socket.io

#node.js #socket.io

Вопрос:

Я собираюсь создать многопользовательскую мини-игру с socket.io , node и react в качестве интерфейса. У меня работает логика комнаты, но я не уверен, что это лучший способ сделать это, особенно на стороне, где игрок присоединяется к комнате. Вот мой код, любые советы, которые могли бы помочь мне улучшить это, очень ценятся, Тай!

/// Мы начнем с клиента, где мы создаем комнату

 add() {
        socket.emit('create')
        this.setState({mode: 'player'}) //ignore this, part of react 
    }
  

/// Теперь на сервере мы получаем это

 socket.on('create', () => {
        socket.join(socket.id);
        io.in(socket.id).emit('join', 'U are in the room!')
        rooms.push(socket.id)   //ignore this
        socket.broadcast.emit('created', socket.id) ///ignore this
    })
  

// И, наконец, вернуться к клиенту, простая проверка

 socket.on('join', data => alert(data))
  

Итак, мы в основном создали и присоединились к комнате, теперь наступает момент, когда другой игрок пытается присоединиться к комнате.

/// На клиенте мы присоединяемся к комнате (при нажатии кнопки с e.target.value = название комнаты)

 join(e) {
        socket.emit('joined', e.target.value) //e.target.value == a room name
    }
  

// Теперь вернемся к серверу

 socket.on('joined', data => {
        socket.join(data) //we got the player in the room!
        io.in(data).emit('joined', 'Hello man, Im new here!') //do I really need this part?
    })
  

// И, наконец, на клиенте

 socket.on('joined', (data) => {alert(data)}) //do I need this as well?
  

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

Комментарии:

1. В чем смысл socket.join(socket.id); ? сокет. io уже помещает сокет в комнату, имя которой соответствует его идентификатору. Итак, вам вообще нужно это делать. Это уже сделано для вас.

2. Вы имеете в виду, что socket.join() = socket.join(creator.socket.id )? В данном случае это немного сокращено на стороне сервера. Как насчет события ‘joined’, могу ли я сократить его?

3. Нет. Я имею в виду, что вам не нужно ничего делать .join(socket.id) , потому что сокет. io уже помещает сокет в комнату, используя имя его идентификатора. Вы можете сократить событие соединения до socket.emit('join', 'U are in the room!') .

4. Спасибо, это действительно помогло мне!

5. Поскольку ваш код работает, вы, вероятно, получите лучший ответ при проверке кода . Вы могли бы попробовать спросить там, хотите ли вы получить более подробную обратную связь.