multiplayer-websocket
2
总安装量
2
周安装量
#71089
全站排名
安装命令
npx skills add https://github.com/liuchiawei/agent-skills --skill multiplayer-websocket
Agent 安装分布
gemini-cli
2
opencode
2
codebuddy
2
github-copilot
2
codex
2
kimi-cli
2
Skill 文档
Multiplayer WebSocket (Tokyo Sounds)
This project uses a standalone WebSocket server plus a React hook for real-time multiplayer. The server runs separately (e.g. npx tsx multiplayer-server.ts on port 3001). The client connects via useMultiplayer, sends position/rotation updates (throttled), and receives a list of nearby players to render.
Architecture at a Glance
| Layer | Role |
|---|---|
| multiplayer-server.ts | Node.js ws server: join/update/leave, 500m visibility, 50ms broadcast, 10s stale cleanup |
| src/types/multiplayer.ts | Shared ClientMessage / ServerMessage and PlayerState types |
| src/hooks/useMultiplayer.ts | Connect on mount, send join/update/leave, handle welcome/players/playerLeft, throttle updates (50ms), silent reconnect every 5s |
| Pages / MultiplayerManager | Call useMultiplayer, pass nearbyPlayers to OtherPlayers, call sendUpdate from position/rotation callbacks or useFrame |
When to Use This Skill
- Changing WebSocket URL (e.g. env
NEXT_PUBLIC_MULTIPLAYER_URL), port, or ws/wss. - Adding or changing message types (extend
ClientMessage/ServerMessageinsrc/types/multiplayer.tsand both server and hook). - Adjusting throttle/broadcast intervals (
CLIENT_UPDATE_INTERVAL_MS,BROADCAST_INTERVAL_MS,RECONNECT_INTERVAL_MS,STALE_PLAYER_TIMEOUT_MS). - Fixing connection lifecycle, reconnection, or cleanup in
useMultiplayer. - Adding server-side logic (visibility radius, auth, rooms) in
multiplayer-server.ts.
Conventions
- Refs for socket and timers: Hook keeps
WebSocketin a ref; cleanup on unmount clears reconnect timeout and closes socket. - Mounted guard: Use
mountedRef.currentbeforesetStateafter async (onopen/onclose) to avoid updates after unmount. - Throttle on client:
sendUpdateonly sends whenDate.now() - lastUpdateTimeRef >= CLIENT_UPDATE_INTERVAL_MS(50ms). - URL: In browser, use
ws://orwss://to match page protocol; from HTTPS usewss://(mixed content otherwise).
Quick Reference
- Message protocol and example code: see reference.md.
- Server entry:
multiplayer-server.ts; client entry:src/hooks/useMultiplayer.tsandsrc/types/multiplayer.ts.