قيد الاختبار حاليًا: سيتم فتح كود GitHub عند الاكتمال.

Ticketing Python مكتبة

GitHub PyPI

المستودع

bash

مثال

مثال أساسي

أنشئ broker واحدًا عند بدء التطبيق وشاركه. wait=0 محاولة فورية واحدة بلا queue، والحد 255 ثانية؛ lease بين 1 و250 ثانية. آخر minimum-work budget إلزامي وقد يكون صفرًا. تُقرب كسور الثانية إلى الأعلى، وتُرفض القيم خارج المجال أو budget أكبر من lease بعد التطبيع قبل الإرسال، بلا clamp.

python
from saro_ticketing import TicketBroker

broker = TicketBroker.connect("127.0.0.1:5225")
await broker.wait_ready(5)

async with await broker.acquire("key", 5, 30, 2) as ticket:
    token = ticket.token
    ...  # Verify/update token high-water and write in the same DB transaction.

Synchronous bridge:

python
with broker.acquire_sync("key", 5, 30, 2) as ticket:
    token = ticket.token
    ...  # Same DB transaction fencing and business write.

الـclose/drop التلقائي release محدود best-effort. استخدم explicit release API إذا كانت النتيجة مهمة. يجب أن يعمل token كـfencing للـDB write المحمي في transaction نفسها.

سلوك يجدر معرفته

  • إذا أمكن إرسال request byte واحد، فضياع الاستجابة النهائية ينتج Indeterminate. لا إعادة تلقائية لـA بالـowner نفسه؛ ولا يدخل caller الـcritical section.
  • Cancel قبل send هو unsent؛ وبعد possible-send يغلق session. إن parsed grant token بالتزامن، يحاول compensating exact-token release محدودًا.
  • M وكل E والاستجابة malformed/oversized/unknown هي session-fatal. يصبح acquire possible-send غير المحسوم Indeterminate.
  • B رفض capacity مؤكد ويعود فورًا. لا retry داخلي؛ يستطيع caller بدء acquire جديد بـowner جديد بعد application backoff.
  • يحاول explicit/compensating release الـexact token فقط خلال 5 ثوان مطلقة من call/enqueue. R نجاح، N absent/not current؛ غياب استجابة نهائية error لا نجاح مفترض.
  • لا يُعاد Ticket إلا مع زمن محافظ موجب يكفي work budget. العمل فوق 250 ثانية unsupported قبل الإرسال.
  • Token DB fencing إلزامي: في transaction نفسها ارفض token <= stored_high_water، وحدّث high-water ونفذ business write قبل commit/rollback ثم release.

خيارات الأمان (رمز · TLS)

جميع الخيارات اختيارية. يجب أن يطابق token قيمة client_tokens في الخادم، ولـ TLS أربعة أنماط: إيقاف / مخزن الثقة الافتراضي للنظام / CA محدد / تخطي التحقق (للاختبار فقط).

python
broker = TicketBroker(
    ["10.0.0.1:5225", "10.0.0.2:5225", "10.0.0.3:5225"],
    token="123",
    tls="system-roots",  # "off" | "insecure-skip-verify" | مسار ملف CA
)

يمكنك إنشاء إعدادات الرمز وTLS والعنقود على صفحة نشر خادم Ticketing.