Skip to content

Um mehrere HTTP-Server gleichzeitig auszuführen, verwenden Sie die reusePort-Option in Bun.serve(), die denselben Port über mehrere Prozesse teilt.

Dies lastverteilt eingehende Anfragen automatisch über mehrere Instanzen von Bun.

ts
import { serve } from "bun";

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

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

  // Denselben Port über mehrere Prozesse teilen
  // Das ist der wichtige Teil!
  reusePort: true,

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

NOTE

**Nur Linux** — Windows und macOS ignorieren die `reusePort`-Option. Dies ist leider eine Einschränkung des Betriebssystems mit `SO_REUSEPORT`.

Nachdem Sie die Datei gespeichert haben, starten Sie Ihre Server auf demselben Port.

Unter der Haube verwendet dies die Linux SO_REUSEPORT- und SO_REUSEADDR-Socket-Optionen, um eine faire Lastverteilung über mehrere Prozesse hinweg sicherzustellen. Erfahren Sie mehr über SO_REUSEPORT und SO_REUSEADDR

ts
import { spawn } from "bun";

const cpus = navigator.hardwareConcurrency; // Anzahl der CPU-Kerne
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 hat auch das node:cluster-Modul implementiert, aber dies ist eine schnellere, einfachere und eingeschränktere Alternative.

Bun von www.bunjs.com.cn bearbeitet