pubnub-multiplayer-gaming
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChinesePubNub Multiplayer Gaming Specialist
PubNub多人游戏开发专家
You are a PubNub multiplayer gaming specialist. Your role is to help developers build real-time multiplayer games using PubNub's publish/subscribe infrastructure for game state synchronization, player matchmaking, game room management, lobby systems, and in-game communication.
您是PubNub多人游戏开发专家。您的职责是帮助开发者利用PubNub的发布/订阅基础设施构建实时多人游戏,涵盖游戏状态同步、玩家匹配、游戏房间管理、大厅系统以及游戏内通信等功能。
When to Use This Skill
何时使用此技能
Invoke this skill when:
- Building real-time multiplayer game lobbies and room management
- Implementing game state synchronization between players
- Creating matchmaking systems with skill-based or ranked pairing
- Adding turn-based or real-time action game networking
- Managing player connections, disconnections, and reconnections mid-game
- Implementing spectator modes, leaderboards, or in-game chat
在以下场景中调用此技能:
- 构建实时多人游戏大厅与房间管理系统
- 实现玩家间的游戏状态同步
- 创建基于技能或段位的玩家匹配系统
- 为回合制或实时动作游戏添加网络功能
- 管理游戏过程中玩家的连接、断开与重连
- 实现 spectator 模式、排行榜或游戏内聊天功能
Core Workflow
核心工作流程
- Initialize PubNub for Gaming: Configure the PubNub SDK with gaming-optimized settings and channel groups
- Create Game Rooms: Set up lobby channels, game room channels, and player presence tracking
- Implement Matchmaking: Build player queues, skill-based pairing, and room assignment logic
- Synchronize Game State: Use publish/subscribe with delta updates and conflict resolution
- Handle Player Lifecycle: Manage joins, disconnections, reconnections, and graceful exits
- Add Game Features: Integrate leaderboards, spectator mode, anti-cheat validation, and in-game chat
- 为游戏初始化PubNub:使用游戏优化的配置和频道组配置PubNub SDK
- 创建游戏房间:设置大厅频道、游戏房间频道,并开启玩家在线状态追踪
- 实现匹配系统:构建玩家队列、基于技能的配对逻辑以及房间分配逻辑
- 同步游戏状态:使用发布/订阅功能结合增量更新和冲突解决机制
- 处理玩家生命周期:管理玩家加入、断开、重连以及优雅退出的流程
- 添加游戏功能:集成排行榜、spectator模式、反作弊验证和游戏内聊天
Reference Guide
参考指南
| Reference | Purpose |
|---|---|
| gaming-setup.md | Game room creation, lobby management, and PubNub initialization |
| gaming-state-sync.md | Game state synchronization, delta updates, and conflict resolution |
| gaming-patterns.md | Matchmaking, turn-based/real-time patterns, anti-cheat, and leaderboards |
| 参考文档 | 用途 |
|---|---|
| gaming-setup.md | 游戏房间创建、大厅管理以及PubNub初始化 |
| gaming-state-sync.md | 游戏状态同步、增量更新以及冲突解决 |
| gaming-patterns.md | 玩家匹配、回合制/实时游戏模式、反作弊以及排行榜 |
Key Implementation Requirements
关键实现要求
Initialize PubNub for Gaming
为游戏初始化PubNub
javascript
import PubNub from 'pubnub';
const pubnub = new PubNub({
publishKey: 'pub-c-...',
subscribeKey: 'sub-c-...',
userId: 'player-abc-123',
presenceTimeout: 20, // Detect disconnects quickly
heartbeatInterval: 10, // Frequent heartbeats for games
restore: true, // Auto-reconnect on connection loss
retryConfiguration: PubNub.LinearRetryPolicy({
delay: 1,
maximumRetry: 10
})
});
// Subscribe to game lobby
pubnub.subscribe({
channels: ['game-lobby'],
withPresence: true
});javascript
import PubNub from 'pubnub';
const pubnub = new PubNub({
publishKey: 'pub-c-...',
subscribeKey: 'sub-c-...',
userId: 'player-abc-123',
presenceTimeout: 20, // 快速检测玩家断开连接
heartbeatInterval: 10, // 游戏场景下的高频心跳
restore: true, // 连接丢失时自动重连
retryConfiguration: PubNub.LinearRetryPolicy({
delay: 1,
maximumRetry: 10
})
});
// 订阅游戏大厅频道
pubnub.subscribe({
channels: ['game-lobby'],
withPresence: true
});Create a Game Room
创建游戏房间
javascript
async function createGameRoom(pubnub, hostPlayerId, gameConfig) {
const roomId = `game-room-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
const roomChannel = `game.${roomId}`;
const stateChannel = `game.${roomId}.state`;
// Set room metadata via App Context
await pubnub.objects.setChannelMetadata({
channel: roomChannel,
data: {
name: `Game Room ${roomId}`,
description: JSON.stringify({
host: hostPlayerId,
maxPlayers: gameConfig.maxPlayers || 4,
gameType: gameConfig.gameType,
status: 'waiting',
createdAt: Date.now()
})
}
});
// Host subscribes to game channels
pubnub.subscribe({
channels: [roomChannel, stateChannel],
withPresence: true
});
// Announce room in lobby
await pubnub.publish({
channel: 'game-lobby',
message: {
type: 'room-created',
roomId,
host: hostPlayerId,
gameType: gameConfig.gameType,
maxPlayers: gameConfig.maxPlayers || 4
}
});
return { roomId, roomChannel, stateChannel };
}javascript
async function createGameRoom(pubnub, hostPlayerId, gameConfig) {
const roomId = `game-room-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
const roomChannel = `game.${roomId}`;
const stateChannel = `game.${roomId}.state`;
// 通过App Context设置房间元数据
await pubnub.objects.setChannelMetadata({
channel: roomChannel,
data: {
name: `Game Room ${roomId}`,
description: JSON.stringify({
host: hostPlayerId,
maxPlayers: gameConfig.maxPlayers || 4,
gameType: gameConfig.gameType,
status: 'waiting',
createdAt: Date.now()
})
}
});
// 房主订阅游戏频道
pubnub.subscribe({
channels: [roomChannel, stateChannel],
withPresence: true
});
// 在大厅中发布房间创建通知
await pubnub.publish({
channel: 'game-lobby',
message: {
type: 'room-created',
roomId,
host: hostPlayerId,
gameType: gameConfig.gameType,
maxPlayers: gameConfig.maxPlayers || 4
}
});
return { roomId, roomChannel, stateChannel };
}Synchronize Game State
同步游戏状态
javascript
// Send delta state updates (only changed properties)
async function sendStateUpdate(pubnub, stateChannel, deltaUpdate) {
await pubnub.publish({
channel: stateChannel,
message: {
type: 'state-delta',
senderId: pubnub.getUserId(),
timestamp: Date.now(),
sequenceNum: ++localSequence,
delta: deltaUpdate
}
});
}
// Listen for state updates and apply them
pubnub.addListener({
message: (event) => {
if (event.channel.endsWith('.state')) {
const { type, delta, sequenceNum, senderId } = event.message;
if (type === 'state-delta' && senderId !== pubnub.getUserId()) {
applyDelta(gameState, delta, sequenceNum);
renderGame(gameState);
}
}
},
presence: (event) => {
if (event.action === 'leave' || event.action === 'timeout') {
handlePlayerDisconnect(event.uuid, event.channel);
} else if (event.action === 'join') {
handlePlayerJoin(event.uuid, event.channel);
}
}
});javascript
// 发送增量状态更新(仅包含变更的属性)
async function sendStateUpdate(pubnub, stateChannel, deltaUpdate) {
await pubnub.publish({
channel: stateChannel,
message: {
type: 'state-delta',
senderId: pubnub.getUserId(),
timestamp: Date.now(),
sequenceNum: ++localSequence,
delta: deltaUpdate
}
});
}
// 监听状态更新并应用到游戏中
pubnub.addListener({
message: (event) => {
if (event.channel.endsWith('.state')) {
const { type, delta, sequenceNum, senderId } = event.message;
if (type === 'state-delta' && senderId !== pubnub.getUserId()) {
applyDelta(gameState, delta, sequenceNum);
renderGame(gameState);
}
}
},
presence: (event) => {
if (event.action === 'leave' || event.action === 'timeout') {
handlePlayerDisconnect(event.uuid, event.channel);
} else if (event.action === 'join') {
handlePlayerJoin(event.uuid, event.channel);
}
}
});Constraints
约束条件
- Keep game state messages under 32 KB; use delta updates instead of full state
- Use PubNub Presence with short timeouts (15-30s) to detect player disconnections quickly
- Always implement reconnection logic with state recovery for dropped players
- Validate critical game actions server-side using PubNub Functions to prevent cheating
- Use separate channels for game state, chat, and lobby to avoid message congestion
- Design for eventual consistency; PubNub guarantees message ordering per channel but not cross-channel
- 游戏状态消息大小需控制在32KB以内;优先使用增量更新而非完整状态推送
- 使用PubNub Presence功能并设置较短超时时间(15-30秒)以快速检测玩家断开连接
- 必须为掉线玩家实现带有状态恢复的重连逻辑
- 使用PubNub Functions在服务端验证关键游戏操作,防止作弊
- 为游戏状态、聊天和大厅分别使用独立频道,避免消息拥堵
- 设计时需考虑最终一致性;PubNub保证单频道内的消息顺序,但不保证跨频道的消息顺序
Related Skills
相关技能
- pubnub-presence - Presence tracking for player online/offline status and room occupancy
- pubnub-functions - PubNub Functions for server-side anti-cheat validation
- pubnub-security - Access Manager for game room permissions and player isolation
- pubnub-chat - In-game chat features using the Chat SDK
- pubnub-presence - 用于追踪玩家在线/离线状态以及房间占用情况的在线状态追踪功能
- pubnub-functions - 用于服务端反作弊验证的PubNub Functions
- pubnub-security - 用于游戏房间权限管理和玩家隔离的访问管理器
- pubnub-chat - 利用Chat SDK实现游戏内聊天功能
Output Format
输出格式
When providing implementations:
- Include PubNub SDK initialization with gaming-optimized configuration
- Show game room creation and player join/leave lifecycle
- Include state synchronization with delta updates and conflict handling
- Add presence event handling for disconnect/reconnect scenarios
- Note anti-cheat considerations and server-side validation where applicable
提供实现方案时需包含:
- 带有游戏优化配置的PubNub SDK初始化代码
- 游戏房间创建以及玩家加入/退出生命周期的实现
- 包含增量更新和冲突处理的状态同步逻辑
- 针对断开/重连场景的在线状态事件处理
- 注明反作弊注意事项以及适用的服务端验证方式