ForHosting KIT · أدوات المطورين

حاسبة token bucket

محدد معدل token bucket هو النموذج المعياري خلف تقييد واجهات API وحصص البوابات والضغط العكسي لدى العميل.

● Betaمجاني · داخل متصفحك
استخدمها من الويبAPIالبريدTelegramالتطبيق قريبًا

تحتفظون بدلو من الرموز حتى سعة ثابتة، وتملأونه بمعدل ثابت مع الزمن، وتنفقون الرموز عند وصول طلب أو دفعة. تقبل حاسبة حد المعدل بأسلوب token bucket السعة ومعدل الملء بالرموز في الثانية وعدد الرموز الحالي والثواني المنقضية منذ آخر تحديث وعدد الرموز التي تحتاجها الدفعة التالية. تملأ الدلو مع سقف صارم عند السعة، وتقرر السماح أو الرفض، وتُبلغ عن الرموز المتبقية بعد القرار، وعند الرفض تحسب مدة الانتظار حتى تكفي الرموز—أو تُبيّن أن الطلب لا يمكن إرضاؤه أبدًا لأنه يتجاوز السعة أو أن الملء صفر. يشغّل نفس الوحدة النقية الحتمية الأداة المجانية في المتصفح ومسار API، فلا تختلف مراجعات التصميم وسكربتات اختبار الحمل ومحاكيات الإنتاج حول الحالات الحدّية مثل دلو ممتلئ أو ملء جزئي أو طلب أكبر من سقف الدفعة.

طريقة الاستخدام

أدخل القيم في النموذج أعلاه. تتحقق الأداة منها قبل الحساب ثم تعرض النتيجة في الصفحة نفسها.

راجع بياناتك

اتبع التسميات والوحدات الموضحة بجانب كل حقل. إذا كانت قيمة مفقودة أو خارج النطاق، توضح الصفحة الحقل الذي يحتاج إلى تصحيح.

أعد الحساب أو نفّذه آليًا

استخدم أداة الويب للفحوص الفردية، واستخدم الواجهة البرمجية عند دمج الإمكانية نفسها في سير عمل آلي.

احصل على النتيجة الآن

أدخل مجموعة من القيم وشاهد النتيجة من دون إعداد جدول بيانات أو برنامج نصي.

قارن السيناريوهات

غيّر قيمة واحدة في كل مرة وأعد الحساب لمعرفة ما الذي يؤثر في النتيجة.

أتمت العمل المتكرر

استخدم الواجهة البرمجية عندما تحتاج إلى تشغيل الحساب نفسه داخل منتجك أو سير عملك.

كيف تعمل حاسبة حد المعدل بأسلوب token bucket؟

تحسب tokens_available = min(capacity, tokens + elapsed × refill_rate)، وتسمح بالدفعة عندما تكون تلك القيمة على الأقل request_count، وتطرح عند السماح، وإلا تُرجع deficit وwait_seconds = deficit / refill_rate عندما يستطيع الملء تغطية التكلفة لاحقًا.

ما الوحدات المناسبة لـ refill_rate وelapsed؟

استخدموا نفس وحدة الزمن للاثنين: refill_rate بالرموز في الثانية وelapsed بالثواني. تحويل الاثنين إلى ميلي ثانية ينجح فقط مع الاتساق؛ وواجهة API لا تحوّل الوحدات نيابةً عنكم.

ماذا لو كان request_count أكبر من capacity؟

تُرفض الدفعة مع can_satisfy false وwait_seconds صفر. طلب واحد يحتاج أكثر مما يمكن للدلو أن يحمل لن يمر أبدًا حتى مع ملء كامل.

هل يمكن أن يكون tokens أكبر من capacity في الإدخال؟

نعم. تقبل الحاسبة قيمة tokens غير سالبة فوق capacity ولا تحدّها إلا بعد تطبيق ملء elapsed، بما يوافق تنفيذات شائعة تخزّن عدّادًا غير محدود حتى التحديث التالي.

كم تكلفة حاسبة token bucket؟

أداة المتصفح مجانية. طلبات API تستخدم رصيد KIT المدفوع مسبقًا بسعر $0.002 لكل مكالمة ناجحة؛ الإدخال غير الصالح لا يُحاسب.

كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.

POSThttps://api.kit.forhosting.com/dev/token-bucket

صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.

curl -X POST https://api.kit.forhosting.com/dev/token-bucket \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"capacity":10,"refill_rate":2,"tokens":5,"elapsed":1.5,"request_count":3}'
{
  "capacity": 10,
  "refill_rate": 2,
  "tokens": 5,
  "elapsed": 1.5,
  "request_count": 3
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "dev.token_bucket",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.

لكل طلب$0.002

السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.

HTTPالرمزالمعنى
401unauthorizedمفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك.
402insufficient_balanceرصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة.
404unknown_typeنوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب.
429rate_limitedتجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة.

اطّلع على توثيق KIT الكامل ←