#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. Поскольку ваш код работает, вы, вероятно, получите лучший ответ при проверке кода . Вы могли бы попробовать спросить там, хотите ли вы получить более подробную обратную связь.