JeuWeb - Crée ton jeu par navigateur
[PHP] Resque ou Rediska et Redis : je rame complétement... - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] Resque ou Rediska et Redis : je rame complétement... (/showthread.php?tid=5821)

Pages : 1 2 3 4 5 6 7 8 9


RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - Sephi-Chan - 27-11-2011

(27-11-2011, 02:22 PM)atra27 a écrit : Surement a cause de ça:
Citation :(dependant upon your traffic to your web site).

En gros si a l'heure prévue t'a un visiteur, c'est cool.
Mais si ton visiteur vient 1h après l'heure de ta tache, et bien ta tache aura été effectuée avec une heure de retard.

Non, ce n'est pas ça. Ça c'est le mécanisme utilisé par XNova (et sûrement pas mal de jeux Web qui tournent sur du mutualisé).

Là, c'est innefficace dans la mesure où le scheduler appelle une page Web à l'heure qu'on lui a donné. Donc ça passe par le serveur Web et ça lui occupe une connexion HTTP. Dans l'absolu, c'est moins efficace que de communiquer directement avec le serveur de queue (Redis dans le cas de Resque).

(27-11-2011, 02:22 PM)atra27 a écrit : Non la seule solution, c'est de se bouger un peu et de créer soit même sa lib d'interaction avec le processus Resque Scheduler.

Je connais pas resque, jamais testé, mais vu que ruby/php on l'air d’être tous deux dépendant d'un appel d'un client pour s’exécuter, le scheduling doit avoir lieu a un autre niveau, et si c'est le cas on doit pouvoir interagir avec ce niveau aussi bien en php qu'en ruby.

Corrigez moi si je me trompe mais peut être faudrait il penser a se créer des solutions par soit même plutôt que de chercher des solutions dans des libs.

@Sephi-Chan: y a moyen que tu poste le contenu de la méthode queue_in de ta classe ruby stp?

Effectivement, la solution c'est de se bouger et de porter Resque Scheduler. Ce que je trouve curieux, c'est que ce c'est la grosse communauté qui se fait piloter par la concurrence…

La méthode enqueue_in. Elle délègue à enqueue_at, qui s'assure qu'on lui a donné une classe qui existe. Puis cette dernière délègue à enqueue_at_with_queue qui déclenche les éventuels hook puis délègue à son tour à delayed_push qui ajoute l'élément à la liste des éléments programmés à ce timestamp, puis ajoute la référence vers cette liste dans le sorted set (qui est donc un ensemble trié des timestamps auxquels il y a des tâches à effectuer).

Ça, c'est donc les extensions effectuées sur Resque pour permettre de programmer des jobs.


Ça vaut bien une petite explication concernant le stockage de tout ça dans Redis.

Pour chaque timestamp auquel il y aura une tâche programmée, on aura une liste dans Redis. La clé de cette liste sera nommée selon le format delayed:#{timestamp} et les éléments de la liste sont des objets JSON qui caractérisent les jobs à lancer à ce timestamp.

Ensuite, on a donc un sorted set (un ensemble trié) qui aura pour clé delayed_queue_schedule et qui contient donc les timestamps auxquels il doit se passer quelque chose. Ça permettra au Scheduler de mettre les éléments dans la vraie queue le moment venu.

Et là on se rend compte que Redis c'est stylé ! Le modèle key-value et la variété de type de données rend ça vraiment intéressant !


Après, il y a encore la partie de Resque Scheduler qui va permettre au processus d'insérer les tâches dans Redis au moments voulus. Je détaillerais ça plus tard.

Ça se passe globalement dans la méthode run de classe Resque::Scheduler.


Il faut aussi penser que Resque Scheduler permet également d'avoir une liste de tâches récurrentes (stockée au format crontab).


RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - Hideaki - 27-11-2011

@Quent XGproyect == XGP Confusediffle:


RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - srm - 27-11-2011

Bah non Sephi-Chan ça ne passe pas par une page web, mais par un script PHP.
C'est à dire un script PHP en lancé en ligne de commande, c'est clairement indiqué Smile
(D'ailleurs il peut lancer aussi un script perl, ce qui dont donc doit induire qu'il peut lancer n'importe quel type de script/exécutable)


RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - php_addict - 27-11-2011

(27-11-2011, 01:26 PM)oxman a écrit : http://www.phpjobscheduler.co.uk/
Citation :Schedule a task to run every few minutes, hourly, daily or weekly - scheduled data is stored in a MySQL database via PHP. phpJobScheduler will fire any PHP script (or perl script) for you at the correct day/time (dependant upon your traffic to your web site).

Il a l'air de faire ce qu'il faut lui non ?

je suis pas certain que cela puisse faire une tache planifiée à la seconde prés, cela ressemble a du crontab tout simplement donc maxi toutes les minutes...non?

je me prend la tête certes, mais c'est quand même intéressant de savoir quelles solutions pourront être envisagées. Effectivement je m'étonne aussi que resque schedulder n'a pas été transcrit en php, je trouve ca fou...


RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - Sephi-Chan - 27-11-2011

(27-11-2011, 05:20 PM)oxman a écrit : Bah non Sephi-Chan ça ne passe pas par une page web, mais par un script PHP.
C'est à dire un script PHP en lancé en ligne de commande, c'est clairement indiqué Smile
(D'ailleurs il peut lancer aussi un script perl, ce qui dont donc doit induire qu'il peut lancer n'importe quel type de script/exécutable)

Regarde le code source et tu verras que rien n'est fait en CLI.
C'est juste une script PHP qui peut être appelée de 2 façon : en le mettant en source d'une image HTML ou en l'incluant depuis un autre script. Ensuite il regarde les jobs qui auraient dû être lancés à l'heure actuelle et les lance.

Quand c'est un script remote, il l'appelle via une requête HTTP, sinon il inclut le fichier donné (ce qui exécute donc la tâche).

Donc c'est vraiment pourri. -.-


(27-11-2011, 05:44 PM)php_addict a écrit : je me prend la tête certes, mais c'est quand même intéressant de savoir quelles solutions pourront être envisagées.

Oui c'est intéressant pour l'aspect architecturale d'avoir un mécanisme de queue et de scheduling.

C'est ton mécanisme de lock & cie qui n'est pas intéressant du tout en revanche : car c'est une mauvaise solution à un problème inexistant.


(27-11-2011, 05:44 PM)php_addict a écrit : Effectivement je m'étonne aussi que resque schedulder n'a pas été transcrit en php, je trouve ca fou...

C'est la honte, mais c'est le moment de briller et de créer toi même ce portage ! Smile


RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - Hideaki - 27-11-2011

@php_ex_addict : avec cron sans doute cronTab tu peux faire à la seconde près, après pour le calcule des ressources je ne sais pas si c'est optimum, un exemple me vient en tête qui est le calcul des ressources d'un inactif es-ce utile de faire des opérations pour un joueur qui ne joue pas ( ou du moins rarement ) mais pour d'autre tâche construction de bâtiment, gestion des attaques cela trouve vite son utilité.


RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - srm - 27-11-2011

J'avais mal vu, c'est en effet tout naze Smile
Mais je pense que de toute façon c'est une erreur de chercher un tel système "en PHP", ou même "en Ruby".
Il faut chercher un vrai système du genre, qui s'interface facilement avec PHP, là c 'est différent.
Un truc du genre par exemple : http://www.sos-berlin.com/modules/cjaycontent/index.php?id=osource_scheduler_introduction_en.htm


RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - Hideaki - 27-11-2011

Langage SQL comme le PL/SQL et compagnie.
Il y a une autre solution qui peut être intéressant c'est le WebService.
Php s'occuperait dans notre cas que de l'affichage et demanderait les informations à un webService qui s'occuperait de tout le reste.


RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - Sephi-Chan - 27-11-2011

L'avantage d'un Resque, c'est quand même d'avoir accès à l'ensemble de tes classes. Il charge l'environnement Ruby on Rails dans chacun des workers et vogue la galère.

Si tu utilises PL/SQL, PL/pgSQL, Transact-SQL et compagnie, tu n'as pas ça.


RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - srm - 27-11-2011

Bon le logiciel que j'ai donné est très bien, mais trop costaud pour nos besoins, c'est bien si tu as vraiment un gros besoin de scheduling Smile