أحداث خادم موقوتة مع Ruby on Rails
-
21-09-2019 - |
سؤال
أحاول إنشاء لعبة على شبكة الإنترنت في Ruby on Rails. لدي نموذج يسمى "لعبة" ، والذي يحتوي على وقت في إدخال قاعدة البيانات يتوافق مع وقت أود أن يتصل فيه الخادم بوظيفة update_game الخاصة بنموذج اللعبة. اعتمادًا على إعدادات اللعبة ، قد يكون هذا كل 30 ثانية لكل 12 ساعة.
يبدو أن Ruby on Rails يعمل فقط عندما يتلقى طلب HTTP ؛ هل هناك طريقة بقعة للحصول على لعبتي على أساس دوري مستقل عن طلبات HTTP؟
المحلول
كنت أنظر إلى تأخير لهذا. عند بدء تشغيل اللعبة ، يمكنك إنشاء تأخير _job للتحديث الأول ، ويمكن لكل تشغيل بعد ذلك إضافة وظيفة جديدة في الفاصل الزمني الصحيح حتى يتم ذلك.
سأقوم بالكثير من الاختبارات ؛) - أنت لا تريد أن تدع الوظائف تفلت منك.
نصائح أخرى
القضبان نفسها لا تفعل هذا ؛ كرون يفعل هذا. روبي ، مع ذلك ، لديه جوهرة تسمى كلما لتسهيل إعلان ونشر وظائف كرون جديدة.
ومع ذلك ، إذا كنت تتوقع حقًا تحديث كمية كبيرة من الألعاب بشكل موثوق كل 30 ثانية ، فقد ترغب في اتباع نهج مختلف إذا كان تحديث اللعبة سيستغرق أي وقت كبير. ربما بمجرد الوصول إلى اللعبة ، يمكن للعبة تشغيل التحديث عدة مرات حسب الضرورة (على سبيل المثال ، إذا مرت 3 دقائق وفاصله 30 ثانية ، قم بتشغيل 6 تحديثات بمجرد طلبها). قد يكون هذا أو لا يكون خيارًا جيدًا لإعدادك ، لذا اكتشف الطريقة الأكثر قابلية للتطبيق لأغراضك.
ابحث في خيارات معالجة الخلفية وربما كرون.
يعجبني Gem "Rufus-Scheduler" الذي يعمل داخل القضبان ، على الرغم من أنني لست متأكدًا من أنه يمكنك إضافة المزيد من المهام برمجيًا.