Перейти к основному содержимому
🎉 GP CONF 2026: Конференция о рынке WEB-игр 👾 23 сентября | Подробнее

Подключение и жизненный цикл комнаты

Мультиплеер использует канал GamePush как игровую комнату. Все игроки, подключившиеся с одинаковым channelId, попадают в одну мультиплеерную сессию.

Список методов

Действия:

Свойства:

События:

Выбор канала

Технически для мультиплеера можно использовать любой канал, если:

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

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

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

Создание канала, его вместимость, приватность и управление участниками описаны в разделах Управление каналами и Участники.

Подключение к комнате

Подпишитесь на события жизненного цикла, убедитесь, что игрок является участником канала, и подключитесь к комнате:

const channelId = 123;

function onConnect({ success }) {
console.log('Connected:', success);
}

function onDisconnect({ reason }) {
console.log('Disconnected:', reason);
}

gp.multiplayer.on('connect', onConnect);
gp.multiplayer.on('disconnect', onDisconnect);

async function connectToRoom() {
const channel = await gp.channels.fetchChannel({ channelId });

if (!channel.isJoined) {
await gp.channels.join({ channelId });
}

await gp.multiplayer.connect({ channelId });
}

await connectToRoom();
warning

При вступлении в приватный канал может быть создана только заявка. Вызывайте gp.multiplayer.connect() после принятия заявки, когда игрок станет участником канала.

Повторный вызов connect() при активном подключении завершится ошибкой.

Текущее состояние подключения

Используйте isConnected, чтобы проверить подключение, и isHost, чтобы узнать роль текущего игрока:

gp.multiplayer.isConnected;
gp.multiplayer.isHost;

Хост выбирается асинхронно. Используйте события ролей для запуска и остановки логики хоста:

gp.multiplayer.on('becameHost', startHostLogic);
gp.multiplayer.on('becamePeer', stopHostLogic);

Событие hostMigrated содержит идентификаторы предыдущего и нового хоста:

gp.multiplayer.on('hostMigrated', ({ oldHost, newHost }) => {
console.log(`Host changed from ${oldHost} to ${newHost}`);
});

Подключённые игроки

gp.multiplayer.connectedPlayers;

Каждый элемент connectedPlayers содержит:

{
playerId: 123,
isHost: false,
ping: 42,
connectionStability: 1,
sessionDuration: 15000,
}

Статистика сети

SDK предоставляет текущие сетевые показатели:

const {
ping,
bufferSize,
bufferDelay,
} = gp.multiplayer.networkStats;
  • ping — измеренная задержка текущего игрока в миллисекундах.
  • bufferSize — количество снимков в буфере интерполяции.
  • bufferDelay — временной диапазон, покрываемый снимками в буфере.

Эти значения можно использовать в панели отладки и индикаторе качества соединения.

Обработка ошибок

gp.multiplayer.on('error:connect', (error) => {
console.error('Could not connect to multiplayer:', error);
});

gp.multiplayer.on('error:sendState', (error) => {
console.error('Could not send multiplayer state:', error);
});

gp.multiplayer.on('error:disconnect', (error) => {
console.error('Could not disconnect from multiplayer:', error);
});

Отключение и очистка

Остановите игровые циклы перед отключением:

async function leaveRoom() {
await gp.multiplayer.disconnect({ channelId });

gp.multiplayer.off('connect', onConnect);
gp.multiplayer.off('disconnect', onDisconnect);
}

Если игрок не подключён, вызов disconnect() ничего не делает.

Оставайтесь на связи

С другими документами раздела вы можете ознакомиться здесь. Для начала работы с GamePush ознакомьтесь с нашими туториалами.

Сообщество GamePush в Telegram: @gs_community.

Для ваших обращений e-mail: official@gamepush.com

Желаем вам успехов!