Я делаю многопользовательскую игру, в которой используются веб-сокеты для разделения игрового состояния между всеми подключенными игроками.
Я решил использовать socket.io с koa, и теперь я столкнулся со следующей проблемой.
Сначала, когда пользователь подключается к серверу, создается новый игрок.
const playersMeta = {}
io.on('connect', socket => {
const playerId = uniqid() // Creates a new unique id for a player
playersMeta[socket.id] = { playerId } // Stores the players id using the socket.id as key
socket.on('disconnect', () => {
delete playersMeta[playerId]
})
})
Дело в том, что игрок должен знать уникальный идентификатор, который ему назначил сервер. Причина в том, что существует игровое состояние, которое сообщает каждому подключенному игроку, где находятся все сущности. Камера следует за игроком, который был создан при входе в игру, поэтому мне нужно знать, за каким игроком должна следовать камера.
Я могу создать новое событие socket.io, после чего игрок выдаст событие, которое возвращает желаемый идентификатор, но, похоже, он становится слишком сложным.
События приятно синхронизировать между разными клиентами, в режиме реального времени данные, которые тоже должны быть изменены, но я уверен, что идентификатор игрока не изменится.
Может быть, лучше просто создать конечную точку отдыха API для получения этих данных. Я использую Koa, и я не уверен, что смогу использовать то же соединение с веб-сокетом вместо http.