Skip to content

لتشغيل خوادم HTTP متعددة بشكل متزامن، استخدم خيار reusePort في Bun.serve() الذي يشارك نفس المنفذ عبر عمليات متعددة.

هذا يوازن تلقائيًا الطلبات الواردة عبر مثيلات Bun متعددة.

ts
import { serve } from "bun";

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

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

  // مشاركة نفس المنفذ عبر عمليات متعددة
  // هذا هو الجزء المهم!
  reusePort: true,

  async fetch(request) {
    return new Response("مرحبًا من Bun #" + id + "!\n");
  },
});

NOTE

**Linux فقط** — Windows و macOS يتجاهلان خيار `reusePort`. هذا قيد في نظام التشغيل مع `SO_REUSEPORT`، للأسف.

بعد حفظ الملف، ابدأ خوادمك على نفس المنفذ.

في الخلفية، يستخدم هذا خيارات المقبس SO_REUSEPORT و SO_REUSEADDR الخاصة بـ Linux لضمان توازن الحمل العادل عبر عمليات متعددة. اعرف المزيد عن SO_REUSEPORT و SO_REUSEADDR

ts
import { spawn } from "bun";

const cpus = navigator.hardwareConcurrency; // عدد أنوية 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 أيضًا بتنفيذ وحدة node:cluster، لكن هذا بديل أسرع وأبسط ومحدود.

Bun بواسطة www.bunjs.com.cn تحرير