SCALING ARCHITECTURE

Why 400 Players Need a Special Architecture

The WebSocket Bottleneck Problem

// Cluster configuration
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
  const redis = new Redis('redis-server');
  redis.subscribe('quiz-messages');
} else {
  const wss = new WebSocket.Server({ port: 8080 + process.pid });
  wss.on('message', (msg) => {
    redis.publish('quiz-messages', msg);
  });
}

Connection Pooling and Heartbeat