Как я могу использовать соединение WebSocket с событиями Socket.io и API отдыха Koa? - PullRequest
0 голосов
/ 01 июля 2018

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

Я решил использовать 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.

1 Ответ

0 голосов
/ 05 июля 2018

Разве вы не можете просто отправить его в тот же разъем?

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.emit('connected', { serverId: 'foo'});
    socket.on('disconnect', () => {
        delete playersMeta[playerId]
    })
});

А на вашем клиенте:

var socket = io('http://server');
  socket.on('connected', function (data) {
    console.log(data); // { serverId: 'foo'}
    // do whatever you want with the servid
  });
...