Question

Comme avec les jeux par navigateur. L'utilisateur construit un bâtiment et une minuterie est définie pour une date / heure spécifique afin de terminer la construction et de créer le bâtiment.

J'imaginais avoir quelque chose comme un démon, mais comment cela fonctionnerait-il? Pour moi, il semble que la rotation + sondage n'est pas la voie à suivre. J'ai consulté async_observer , mais est-ce que cela convient à quelque chose comme cela?

Était-ce utile?

La solution

Si vous souhaitez uniquement que l'événement soit visible pour le joueur propriétaire, le modèle peut alors signaler son statut mis à jour à la demande.

Si, par contre, il doit être visible par quiconque à partir du moment de sa création planifiée, alors le problème est un peu plus intéressant.

Je dirais que vous avez besoin de deux choses. Une file d'attente dans laquelle vous pouvez placer des événements temporisés (une table de base de données ferait parfaitement l'affaire) et un processus d'arrière-plan, exécuté en continu ou redémarré fréquemment, permettant d'extraire les événements planifiés depuis la dernière exécution (ou ceux qui sont imminents, je suppose) et actions les.

En regardant la liste d'options sur le wiki de Rails, il semble que n’existe pas encore de solution unique. Espérons que l'un d'entre eux convienne.

Autres conseils

Je viens de faire exactement cette chose pour un PBB sur lequel je travaille (Big Villain, vous pouvez voir le travail en cours sur MadGamesLab.com). Quoi qu'il en soit, je suis allé avec une table de commandes où les commandes utilisateur généraient chacune une entrée et une table d’événements avec une ou plusieurs entrées par commande (renouant avec la commande). Un démon secondaire exécuté à l'aide de script / runner pour le démarrer interroge périodiquement la table d'événements et exécute des événements dont le temps est écoulé.

Jusqu'à présent, cela semble fonctionner assez bien, à moins que je ne vois un problème lorsque je lance un grand nombre d'utilisateurs, je ne prévois pas de le changer.

Dans une certaine mesure, cela dépend du degré de logique de votre front-end et de celui de votre modèle. Si vous savez combien de temps va s'écouler avant qu'il ne se passe quelque chose, vous pouvez conserver l'essentiel de la logique au début.

Je voudrais utiliser votre modèle pour déterminer l’état de la situation et, sur une demande particulière, vous pouvez vérifier s’il est construit ou non. Je ne vois pas pourquoi vous auriez besoin d'un travailleur d'arrière-plan pour cela.

J'utiliserais AJAX pour démarrer un chronomètre (voir de l'exécutif des périodiques ) pour mettre à jour votre interface utilisateur. . Du côté du modèle, gardez simplement une trace de la colonne created_at pour votre bâtiment et ne lui permettez d’être utilisée que si son délai de construction est écoulé. Ainsi, vous n’aurez pas à vous rendre à votre base de données toutes les quelques secondes pour voir si votre bâtiment est terminé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top