Skip to content

Para ejecutar múltiples servidores HTTP concurrentemente, usa la opción reusePort en Bun.serve() que comparte el mismo puerto entre varios procesos.

Esto balancea automáticamente la carga de solicitudes entrantes entre múltiples instancias de Bun.

ts
import { serve } from "bun";

const id = Math.random().toString(36).slice(2);

serve({
  port: process.env.PORT || 8080,
  development: false,

  // Compartir el mismo puerto entre múltiples procesos
  // ¡Esta es la parte importante!
  reusePort: true,

  async fetch(request) {
    return new Response("¡Hola desde Bun #" + id + "!\n");
  },
});

NOTE

**Solo Linux** — Windows y macOS ignoran la opción `reusePort`. Esta es una limitación del sistema operativo con `SO_REUSEPORT`.

Después de guardar el archivo, inicia tus servidores en el mismo puerto.

Internamente, esto usa las opciones de socket SO_REUSEPORT y SO_REUSEADDR de Linux para asegurar un balanceo de carga justo entre múltiples procesos. Más información sobre SO_REUSEPORT y SO_REUSEADDR

ts
import { spawn } from "bun";

const cpus = navigator.hardwareConcurrency; // Número de núcleos de CPU
const buns = new Array(cpus);

for (let i = 0; i < cpus; i++) {
  buns[i] = spawn({
    cmd: ["bun", "./server.ts"],
    stdout: "inherit",
    stderr: "inherit",
    stdin: "inherit",
  });
}

function kill() {
  for (const bun of buns) {
    bun.kill();
  }
}

process.on("SIGINT", kill);
process.on("exit", kill);

Bun también ha implementado el módulo node:cluster, pero esta es una alternativa más rápida, simple y limitada.

Bun por www.bunjs.com.cn editar