Skip to content

Para executar múltiplos servidores HTTP simultaneamente, use a opção reusePort em Bun.serve() que compartilha a mesma porta entre múltiplos processos.

Isso faz balanceamento de carga automático das requisições entre múltiplas instâncias do Bun.

ts
import { serve } from "bun";

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

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

  // Compartilhar a mesma porta entre múltiplos processos
  // Esta é a parte importante!
  reusePort: true,

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

NOTE

**Apenas Linux** — Windows e macOS ignoram a opção `reusePort`. Esta é uma limitação do sistema operacional com `SO_REUSEPORT`, infelizmente.

Depois de salvar o arquivo, inicie seus servidores na mesma porta.

Internamente, isso usa as opções de socket Linux SO_REUSEPORT e SO_REUSEADDR para garantir balanceamento de carga justo entre múltiplos processos. Saiba mais sobre SO_REUSEPORT e 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 também implementou o módulo node:cluster, mas esta é uma alternativa mais rápida, simples e limitada.

Bun by www.bunjs.com.cn edit