multiplayer-websocket
SKILL.md
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.
Weekly Installs
3
Repository
liuchiawei/agent-skillsGitHub Stars
1
First Seen
Feb 27, 2026
Security Audits
Installed on
gemini-cli3
opencode3
codebuddy3
github-copilot3
codex3
kimi-cli3