Pour exécuter plusieurs serveurs HTTP simultanément, utilisez l'option reusePort dans Bun.serve() qui partage le même port entre plusieurs processus.
Ceci équilibre automatiquement la charge des requêtes entrantes entre plusieurs instances de Bun.
ts
import { serve } from "bun";
const id = Math.random().toString(36).slice(2);
serve({
port: process.env.PORT || 8080,
development: false,
// Partager le même port entre plusieurs processus
// C'est la partie importante !
reusePort: true,
async fetch(request) {
return new Response("Hello from Bun #" + id + "!\n");
},
});NOTE
**Linux uniquement** — Windows et macOS ignorent l'option `reusePort`. C'est une limitation du système d'exploitation avec `SO_REUSEPORT`, malheureusement.Après avoir enregistré le fichier, démarrez vos serveurs sur le même port.
Sous le capot, cela utilise les options de socket Linux SO_REUSEPORT et SO_REUSEADDR pour assurer un équilibrage de charge équitable entre plusieurs processus. En savoir plus sur SO_REUSEPORT et SO_REUSEADDR
ts
import { spawn } from "bun";
const cpus = navigator.hardwareConcurrency; // Nombre de cœurs 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 a également implémenté le module node:cluster, mais ceci est une alternative plus rapide, simple et limitée.