networking

pluginagentmarketplace's avatarfrom pluginagentmarketplace

Game networking protocols, WebSocket/UDP implementation, latency optimization for real-time multiplayer

⭐1stars🔀0forks📁View on GitHub🕐Updated Dec 31, 2025

When & Why to Use This Skill

This Claude skill provides a comprehensive framework for designing and implementing high-performance game networking architectures. It specializes in real-time multiplayer synchronization using WebSocket, UDP, QUIC, and TCP, offering optimized server templates, protocol selection strategies, and advanced latency reduction techniques to ensure seamless player experiences.

Use Cases

  • Developing low-latency networking layers for fast-paced competitive games (e.g., FPS, Racing) using custom UDP implementations.
  • Architecting scalable WebSocket-based servers for web-based multiplayer games and real-time social features.
  • Optimizing existing game network performance by implementing delta compression, heartbeat mechanisms, and protocol-specific tuning.
  • Troubleshooting complex network issues such as packet loss, high jitter, and connection timeouts using built-in diagnostic checklists and observability tools.
  • Establishing robust unit testing and monitoring for game servers to track active connections, latency histograms, and bandwidth usage.
namenetworking
descriptionGame networking protocols, WebSocket/UDP implementation, latency optimization for real-time multiplayer
sasmp_version"1.3.0"
version"2.0.0"
bonded_agent02-networking-specialist
bond_typePRIMARY_BOND
typecounter
enum[websocket, udp, quic, tcp]
min10
max500
default100
max_attempts3
backoffexponential
initial_delay_ms100
max_delay_ms5000
levelinfo
fields[connection_id, latency_ms, packet_size]
- namenetwork_bytes_sent
enabledtrue
sample_rate0.1

Game Networking

Implement real-time multiplayer networking with WebSocket, UDP, and latency optimization.

WebSocket Game Server

const WebSocket = require('ws');

class GameServer {
  constructor(port = 8080) {
    this.wss = new WebSocket.Server({ port });
    this.players = new Map();
    this.setupHandlers();
  }

  setupHandlers() {
    this.wss.on('connection', (ws, req) => {
      const playerId = this.generateId();
      const player = { ws, state: {}, joinedAt: Date.now() };
      this.players.set(playerId, player);

      ws.on('message', (data) => this.handleMessage(playerId, data));
      ws.on('close', () => this.handleDisconnect(playerId));
      ws.on('error', (err) => this.handleError(playerId, err));

      this.sendToPlayer(playerId, { type: 'connected', playerId });
    });
  }

  handleMessage(playerId, data) {
    try {
      const msg = JSON.parse(data);
      // Validate message structure
      if (!msg.type) throw new Error('Missing message type');
      this.processGameMessage(playerId, msg);
    } catch (err) {
      console.error(`Invalid message from ${playerId}:`, err.message);
    }
  }

  broadcast(msg, exclude = null) {
    const data = JSON.stringify(msg);
    this.players.forEach((player, id) => {
      if (id !== exclude && player.ws.readyState === WebSocket.OPEN) {
        player.ws.send(data);
      }
    });
  }
}

UDP for Low Latency

const dgram = require('dgram');

class UDPGameServer {
  constructor(port = 7777) {
    this.socket = dgram.createSocket('udp4');
    this.clients = new Map(); // address:port -> client
    this.sequence = 0;

    this.socket.on('message', (msg, rinfo) => {
      const key = `${rinfo.address}:${rinfo.port}`;
      this.handlePacket(key, msg, rinfo);
    });

    this.socket.bind(port);
  }

  send(client, data, reliable = false) {
    const packet = this.createPacket(data, reliable);
    this.socket.send(packet, client.port, client.address);
  }

  createPacket(data, reliable) {
    const seq = this.sequence++;
    const header = Buffer.alloc(4);
    header.writeUInt16LE(seq, 0);
    header.writeUInt8(reliable ? 1 : 0, 2);
    return Buffer.concat([header, data]);
  }
}

Protocol Selection Guide

Protocol Latency Reliability Use Case
WebSocket 20-50ms High Web games, chat
UDP 5-20ms None FPS, racing
QUIC 10-30ms Configurable Modern hybrid
TCP 30-100ms High Turn-based, MMO

Troubleshooting

Common Failure Modes

Error Root Cause Solution
ECONNRESET Client disconnect Graceful handling
High latency Network congestion Enable delta compression
Packet loss UDP unreliability Add reliability layer
WebSocket timeout Idle connection Implement heartbeat

Debug Checklist

# Check active connections
netstat -an | grep :8080 | wc -l

# Monitor bandwidth
iftop -i eth0 -f "port 8080"

# Capture packets
tcpdump -i eth0 port 8080 -w capture.pcap

Unit Test Template

describe('GameServer', () => {
  let server, client;

  beforeEach(() => {
    server = new GameServer(8081);
    client = new WebSocket('ws://localhost:8081');
  });

  afterEach(() => {
    client.close();
    server.close();
  });

  test('accepts connections', (done) => {
    client.on('open', () => {
      expect(server.players.size).toBe(1);
      done();
    });
  });

  test('broadcasts messages', (done) => {
    client.on('message', (data) => {
      const msg = JSON.parse(data);
      expect(msg.type).toBe('connected');
      done();
    });
  });
});

Resources

  • assets/ - Server templates
  • scripts/ - Network testing tools
  • references/ - Protocol guides