menuTicketing

مكتبة Ticketing لـ Javascript / Typescript

GitHub

المستودع

JavaScript, TypeScripthome_and_garden
bash
bash
bash

أمثلة

مثال بسيط

تتصل بخادم واحد، وتحجز مفتاحًا ثم تعيده فورًا.

ts
const wait = 5000;
const lease = 30000;

const broker = TicketBroker.connect("127.0.0.1:5225");
try {
    await broker.waitReady(5000);

    const ticket = await broker.acquire("key", wait, lease);
    await ticket.release();

    console.log("pass");
} finally {
    broker.close();
}

مثال التزامن (قفل موزع)

مثال يتحقق من أن عدة معاملات (transactions) تُجري إيداعات وسحوبات في وقت واحد عبر قفل خاص بكل حساب دون تعارض، وأن الرصيد يعود دائمًا إلى قيمته الأولية.

ts
async function transaction(broker: TicketBroker, account: number, delta: number): Promise<void> {
    const key = `account-${account}`;

    let ticket: Ticket;
    try {
        ticket = await broker.acquire(key, WAIT_MS, LEASE_MS);
    } catch (e) {
        console.error(`account ${account} acquire failed: ${e}`);
        return;
    }

    const before = balances[account];
    await new Promise((resolve) => setImmediate(resolve));
    const after = before + delta;
    balances[account] = after;

    const [action, sign] = delta < 0 ? ["withdraw", "-"] : ["deposit", "+"];
    console.info(`account ${account} ${action} ${sign}$${AMOUNT} -> $${after}`);

    ticket.close(); // إرجاع تلقائي في الخلفية
}

راجع الأمثلة الكاملة في example.test.ts, bank.test.ts, bench.test.ts.