سؤال

أحاول إنشاء لعبة على شبكة الإنترنت في Ruby on Rails. لدي نموذج يسمى "لعبة" ، والذي يحتوي على وقت في إدخال قاعدة البيانات يتوافق مع وقت أود أن يتصل فيه الخادم بوظيفة update_game الخاصة بنموذج اللعبة. اعتمادًا على إعدادات اللعبة ، قد يكون هذا كل 30 ثانية لكل 12 ساعة.

يبدو أن Ruby on Rails يعمل فقط عندما يتلقى طلب HTTP ؛ هل هناك طريقة بقعة للحصول على لعبتي على أساس دوري مستقل عن طلبات HTTP؟

هل كانت مفيدة؟

المحلول

كنت أنظر إلى تأخير لهذا. عند بدء تشغيل اللعبة ، يمكنك إنشاء تأخير _job للتحديث الأول ، ويمكن لكل تشغيل بعد ذلك إضافة وظيفة جديدة في الفاصل الزمني الصحيح حتى يتم ذلك.

سأقوم بالكثير من الاختبارات ؛) - أنت لا تريد أن تدع الوظائف تفلت منك.

نصائح أخرى

القضبان نفسها لا تفعل هذا ؛ كرون يفعل هذا. روبي ، مع ذلك ، لديه جوهرة تسمى كلما لتسهيل إعلان ونشر وظائف كرون جديدة.

ومع ذلك ، إذا كنت تتوقع حقًا تحديث كمية كبيرة من الألعاب بشكل موثوق كل 30 ثانية ، فقد ترغب في اتباع نهج مختلف إذا كان تحديث اللعبة سيستغرق أي وقت كبير. ربما بمجرد الوصول إلى اللعبة ، يمكن للعبة تشغيل التحديث عدة مرات حسب الضرورة (على سبيل المثال ، إذا مرت 3 دقائق وفاصله 30 ثانية ، قم بتشغيل 6 تحديثات بمجرد طلبها). قد يكون هذا أو لا يكون خيارًا جيدًا لإعدادك ، لذا اكتشف الطريقة الأكثر قابلية للتطبيق لأغراضك.

ابحث في خيارات معالجة الخلفية وربما كرون.

يعجبني Gem "Rufus-Scheduler" الذي يعمل داخل القضبان ، على الرغم من أنني لست متأكدًا من أنه يمكنك إضافة المزيد من المهام برمجيًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top