script mmorpg persistant ?

foufounet
Invité n'ayant pas de compte PHPfrance

06 mars 2010, 13:50

Bonjour,

Pourquoi faire un script persistant ? Pourquoi ne pas simplement mettre a jour les infos quand elle sont consulter ?

@+

Eléphanteau du PHP | 16 Messages

06 mars 2010, 15:44

Si j'ai bien compris, pascaltje et Calimero, vous semblez être assez d'accord finalement.

Si on prend le cas d'Ogame. Que ce passe-t-il lors de la construction d'une mine ?
Etape 1 : clique sur "developpez" qui envoie une requête au serveur
Etape 2 : On a ensuite de l'actualisation en Ajax de l'animation.
Etape 3 : au bout d'un certain temps la construction est terminée.
Etape 4 : envoie d'une requête au serveur pour dire que terminé ? Je pense que c'est incomplet car il doit y avoir aussi une vérification côté serveur.

C'est ça ? J'ai l'impression de rater beaucoup d'étapes.

ViPHP
ViPHP | 2287 Messages

06 mars 2010, 17:37

Si j'ai bien compris, pascaltje et Calimero, vous semblez être assez d'accord finalement.

Si on prend le cas d'Ogame. Que ce passe-t-il lors de la construction d'une mine ?
Etape 1 : clique sur "developpez" qui envoie une requête au serveur
Etape 2 : On a ensuite de l'actualisation en Ajax de l'animation.
Etape 3 : au bout d'un certain temps la construction est terminée.
Etape 4 : envoie d'une requête au serveur pour dire que terminé ? Je pense que c'est incomplet car il doit y avoir aussi une vérification côté serveur.

C'est ça ? J'ai l'impression de rater beaucoup d'étapes.
Pour Ogame, c'est exactement ça.

Pascaltje et moi sommes d'accord sauf sur le modèle technique à te recommander. Ce sera à toi de trancher pour ton projet en fonction de ce qui colle le mieux ;)

La solution de pascaltje (qui a plus d'expérience dans les jeux web que moi) correspond à la solution 1 dont je te parlais en début de thread. Elle a l'avantage niveau simplicité de mise en oeuvre (niveau développement, on reste dans du web "classique") et aussi au niveau des exigences techniques moindres pour l'hébergement du jeu (dans 99% des cas, tu ne pourras pas faire tourner un démon sur un hébergement mutualisé, le serveur dédié est incontournable). En revanche elle t'impose de fractionner ton jeu en une multitude d'opérations simples, et aussi de fonctionner sur un mode "à la demande" (quand aucun joueur n'est connecté, ton jeu est inactif, il ne s'active qu'à la demande) et c'est à toi de voir si ça peut convenir ou pas.

La solution du démon a, elle, l'avantage de permettre des traitements beaucoup plus lourds faits en une seule fois, et une meilleure maitrise de la charge du serveur avec un grand nombre de joueurs connectés (toute la lourdeur des traitements du jeu est contenue dans une seule instance d'un seul programme, plus facile à gérer à terme niveau montée en charge notamment) mais les inconvénients inverses des avantages de l'autre solution (serveur dédié obligatoire, un peu plus dur niveau développement). Elle permet au jeu de réellement tourner 24h/24, que les joueurs soient connectés ou non, sans avoir de pirouette technique à réaliser pour ce faire.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

foufounet
Invité n'ayant pas de compte PHPfrance

06 mars 2010, 20:50

Si j'ai bien compris, pascaltje et Calimero, vous semblez être assez d'accord finalement.

Si on prend le cas d'Ogame. Que ce passe-t-il lors de la construction d'une mine ?
Etape 1 : clique sur "developpez" qui envoie une requête au serveur
Etape 2 : On a ensuite de l'actualisation en Ajax de l'animation.
Etape 3 : au bout d'un certain temps la construction est terminée.
Etape 4 : envoie d'une requête au serveur pour dire que terminé ? Je pense que c'est incomplet car il doit y avoir aussi une vérification côté serveur.

C'est ça ? J'ai l'impression de rater beaucoup d'étapes.
Pour Ogame, c'est exactement ça.
Est tu sur de toi ?

Je dirait plutôt que les étape sont celle ci

Etape 1 : clique sur "developpez" qui envoie une requête au serveur (exemple table todo champs timestamp_debut, timestamp_fin, type_mine, niveau)
Etape 2 : On a ensuite de l'actualisation en javascript simple de l'animation. Vide la table todo
Etape 3 : au bout d'un certain temps la construction est terminée. Javascript recharge la page, vide la table todo par rapport a la timestamp_fin et effectue la tache. (peut (ou doit) étre effectuer avec un tache cron)

ViPHP
ViPHP | 2287 Messages

06 mars 2010, 21:35

Est tu sur de toi ?

Je dirait plutôt que les étape sont celle ci

Etape 1 : clique sur "developpez" qui envoie une requête au serveur (exemple table todo champs timestamp_debut, timestamp_fin, type_mine, niveau)
Etape 2 : On a ensuite de l'actualisation en javascript simple de l'animation. Vide la table todo
Etape 3 : au bout d'un certain temps la construction est terminée. Javascript recharge la page, vide la table todo par rapport a la timestamp_fin et effectue la tache. (peut (ou doit) étre effectuer avec un tache cron)
Non, en effet je n'ai pas été jusqu'à analyser le javascript :) C'est peut-être plus proche de ce que tu dis. Mais l'un comme l'autre, c'est bien l'idée.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 16 Messages

06 mars 2010, 23:39

Etape 1 : clique sur "developpez" qui envoie une requête au serveur (exemple table todo champs timestamp_debut, timestamp_fin, type_mine, niveau)
Quel est l'usage de cette table todo ? Tu ferais une table avec les taches à effectuer ? Pourquoi ? Tu pourrais m'en dire un peu plus stp ?
(peut (ou doit) étre effectuer avec un tache cron)
Pourquoi une tâche cron ?

Concernant les deux solutions.
Si je reformule, pour être sûr de suivre, la première solution est plus simple mais risque de faire des piques de consommation de ressources car si de nombreux utilisateurs sont connectés en même temps, ça fait plein de requêtes pour actualiser plein de pages et de données (avec risque de bugs). La mise à jour risque aussi d'être plus complexe car beaucoup de code éclaté.

Sinon, l'autre solution, a l'avantage de traiter au fur et à mesure la charge de travail, mais plus complexe à mettre en oeuvre au départ et besoin d'un serveur dédié (entre 50 et 100 € HT par mois).

C'est bien ça ?

Eléphanteau du PHP | 25 Messages

07 mars 2010, 00:04

Re bonsoir !

(c'est foufounet je me suis rendue compte que j'avais un compte sur le forum... :mrgreen: )
Quel est l'usage de cette table todo ? Tu ferais une table avec les taches à effectuer ? Pourquoi ? Tu pourrais m'en dire un peu plus stp ?
Exacte, c'est une table qui sert a stocker les chose a effectuer, j'ai fait sa a la vite fait mais l'idée est la, quand tu affichera les mine tu testera si telle mine n'est pas en construction, si elle l'est tu affiche le temps restant etc... :)
Pourquoi une tâche cron ?
Sa dépend de ton choix tu peux le faire ou pas, si tu le fait sa simplifira les chose tu dit a ton cron d'updater le compte x, simple, mais si le compte est inactif pendent 3 jours, et que juste avant il a monté sa mine est quelle c'est fini pendent ces 3jours alors toutes la production qui aurait dû n'est pas, pour corriger sa il faudrait que tu soustrait le timestamp de fin de la tache par le timestamp actuelle tu obtient alors tous le l'aps de temps qui la mine na pas produit, tu ajoute en conséquence ! :)

Voila tout !

Open RPG
Invité n'ayant pas de compte PHPfrance

22 janv. 2011, 17:12

Il y a aussi le projet OpenRPG sur www.openrpg.fr si tu as besoins.

Eléphanteau du PHP | 16 Messages

23 janv. 2011, 17:20

Merci pour l'info ;)