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.