スキル一覧に戻る
pluginagentmarketplace

networking

by pluginagentmarketplace

Server-side game development plugin with multiplayer and backend patterns

2🍴 0📅 2026年1月9日
GitHubで見るManusで実行

SKILL.md


name: networking description: Game networking protocols, WebSocket/UDP implementation, latency optimization for real-time multiplayer sasmp_version: "1.3.0" version: "2.0.0" bonded_agent: 02-networking-specialist bond_type: PRIMARY_BOND

Parameters

parameters: required: - protocol_type - connection_count optional: - latency_target_ms - bandwidth_limit_kbps validation: protocol_type: type: string enum: [websocket, udp, quic, tcp] connection_count: type: integer min: 1 max: 100000 latency_target_ms: type: integer min: 10 max: 500 default: 100

Retry Configuration

retry_config: max_attempts: 3 backoff: exponential initial_delay_ms: 100 max_delay_ms: 5000 retryable_errors: - ECONNRESET - ETIMEDOUT - ECONNREFUSED

Observability

observability: logging: level: info fields: [connection_id, latency_ms, packet_size] metrics: - name: network_connections_active type: gauge - name: network_latency_ms type: histogram - name: network_bytes_sent type: counter tracing: enabled: true sample_rate: 0.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

ProtocolLatencyReliabilityUse Case
WebSocket20-50msHighWeb games, chat
UDP5-20msNoneFPS, racing
QUIC10-30msConfigurableModern hybrid
TCP30-100msHighTurn-based, MMO

Troubleshooting

Common Failure Modes

ErrorRoot CauseSolution
ECONNRESETClient disconnectGraceful handling
High latencyNetwork congestionEnable delta compression
Packet lossUDP unreliabilityAdd reliability layer
WebSocket timeoutIdle connectionImplement 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

スコア

総合スコア

60/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です