TourDeJeu, le réseau des jeux en ligne alternatifs : jeux web multijoueurs, jeux par forum. En savoir +

Flux RSS des discussions du forum : pour les joueurs, et pour les créateurs et MJ
  Reply to this topicStart new topicStart Poll

> Passer Son Jpc En Automatique, ... ou utiliser une crontab
Sinclair
  Ecrit le : Jeudi 28 Avril 2005 à 16h12
Quote Post


Pro
*

Groupe : Membre
Messages : 133


Salut !

Comme le nombre de joueur augmente et que je vais bientot devoir faire tourner 3 parties de 20 joueurs chacune, il faut absolument que je mette en place une résolution automatique des tours.

Tout d'abord, je dois lancer une page php de mon site via webcron, et je me dis qu'il ne faut surtout pas que la page soit connue par une personne mal intentionnée car elle pourrait faire tourner X tours d'affilés ce qui détruirait la partie. Quel genre de protection puis-je mettre en place ?
(Mon jeu tourne actuellement au rythme d'un tour ar semaine)

D'autre part, comme je continue à programmer, je ne suis pas à l'abris d'un bug, et si la résolution du tour plante au milieu, je vais être en galère car la moitié des actions auront étée traitée (base mise à jour) et ça va être infernal de rétablir tout ça.

Connaissez-vous une méthode pour s'en prémunir ?
Je pourais faire touner le tour sur une copie de la base et si ça se passe bien le script automatique ferait tourner la partie sur la vrai base ?
Ca va être très lourd à mettre en place ça unsure.gif


--------------------
Concepteur/Développeur de guildes.jpc.free.fr
PM
Top
chacal3
Ecrit le : Jeudi 28 Avril 2005 à 19h48
Quote Post


Ouf
*

Groupe : Membre
Messages : 296


Par exemple (entre autre) : Login + mot de passe à valider sur ta page pour être sur qu'il n'y a que toi qui puisse "valider" l'action.

Et au cas ou tu te ferais mettre par un bidouilleur, met une Variable temporel dans la bdd (ou ailleurs) !

Style : minimum 6 jours 20 heures entre 2 tours.

Au pire, le vilain méchant pourra au mieux te faire tourner le tour 4 heure à l'avance et seulement 1 fois par semaine.

Il te rendrais PRESQUE service sur le coup ! tongue.gif


--------------------
Vous pouvez m'appeler MAAAÎTRE, je ne me vexerai pas... :)
PMEmail Poster
Top
Haiken
Ecrit le : Jeudi 28 Avril 2005 à 21h23
Quote Post


Ouf
*

Groupe : Membre
Messages : 360


Pour le plantage en plein milieu, le mieux est sans doute d'utiliser les transactions... Mais il faut MySQL avec innoDB... et toutes tes tables au format inoodb donc.

Au niveau codage ça se résumera à rajouter un mysql_query("START TRANSACTION") au debut et un mysql_query("COMMIT") à la fin


--------------------
PMEmail Poster
Top
Guest_The Fab
Ecrit le : Jeudi 28 Avril 2005 à 23h00
Quote Post


Unregistered






Une option (que j'utilise pour E-Sub 2) est de dumper la base de données avant la "résolution". Comme ça en cas de merde, j'avais toujours qqch sous la main pour remonter le bousin.

Pour openESub, je suis passé au transactionnel (mais sur postgreSQL) et c'est encore mieux (ceci dit, je fais toujours un dump historisé de la base...).

Pour vérouiller la page PHP de "résolution" sinon, le mieux est de la protéger avec un fichier .htaccess apache pour autoriser un seul login/pass ou éventuellement une IP.

Après tout dépend ou tu as ton cron. Si tu as un accès shell à la machine, c'est le top, il suffit d'autoriser que l'ip de la machine. Si tu utilises un service genre "webcron", le mieux est d'utiliser un couple login/pass que tu utilises en demandant à "webcron" de charger la page :

http://user:pass@www.mondomaine.fr/maPageAdmin.php

@+ et bon courage
Top
Sybler
Ecrit le : Jeudi 28 Avril 2005 à 23h01
Quote Post


Ouf
*

Groupe : Membre
Messages : 453


Si tu veux tout faire sans cron job, et que tu à un flot acceptable de joueurs, tu peux faire ceci:

À chaque fois qu'une page est chargé, tu fais une requete qui vérifie à quelle date à été le dernier tour.

Si le temps entre maintenant et la dernier date du tour est plus grande que l'interval des tours: Effectuer la remise, et mettre à jour la DB pour programmer le prochain tour.

Édidemment, tu DOIS avoir des visiteurs qui vienne souvent sur le site, sinon le tour ne sera pas déclencher à temps.



--------------------
user posted image
PMEmail PosterUsers Website
Top
Sinclair
Ecrit le : Vendredi 29 Avril 2005 à 15h08
Quote Post


Pro
*

Groupe : Membre
Messages : 133


Waoo ... merci pour ces infos c'est cool !

Chacal3 : Le login et le mot de passe à valider sur la page me semble bizare vu que la page va être appelée depuis une crontab.
Tu parlais d'un formulaire ou d'autre chose ?

Haiken : Oui ! Bonne idée ! thumbsup.gif
Les transactions, c'est exactement ce qu'il me faut. Mais innoDB est obligé ? Pourquoi ne pas tout simplment utiliser les transaction avec php et mySQL comme il le montre ici ?

Cher créateur d'openESub : C'est clair que le dump de base systématique me semble être une bonne sécurité. Jusqu'a maintenant je le fait à la main via phpMyAdmin, mais je ne sais pas faire un dump via php unsure.gif whistling.gif

Pour la protection, tu me suggères d'utiliser :
http://user:pass@www.mondomaine.fr/maPageAdmin.php
c'est une syntaxe que je ne connais pas, comment je récupère les paramètres en php ?

J'ai plus l'habitude de : http://www.mondomaine.fr/maPageAdmin.php?user=toto&pass=titi
whistling.gif

Sybler, c'est une méthode interessante mais comme la résolution dure un certain temps, je préfère la programmer quand y'a personne sur le site.


--------------------
Concepteur/Développeur de guildes.jpc.free.fr
PM
Top
Haiken
Ecrit le : Vendredi 29 Avril 2005 à 16h15
Quote Post


Ouf
*

Groupe : Membre
Messages : 360


QUOTE (Sinclair @ 29 Apr 2005, 14:08 )
Haiken : Oui ! Bonne idée ! thumbsup.gif
Les transactions, c'est exactement ce qu'il me faut. Mais innoDB est obligé ? Pourquoi ne pas tout simplment utiliser les transaction avec php et mySQL comme il le montre ici ?

Comme indiqué dans ton article, il faut InnoDB innocent.gif :

QUOTE
Requirements for this Article

MySQL and PHP installed on a local or remote server.
Knowledge of using the MySQL Monitor program.
MySQL connectivity using PHP.
MySQL Version 4.0.12 using InnoDB type tables



Avec la syntaxe http://user:pass@www.mondomaine.fr/maPageAdmin.php le login et mot de passe seront transmis au niveau du protocole HTTP, et sont donc exploitables par Apache avec une restriction .htaccess

Avec la syntaxe http://www.mondomaine.fr/maPageAdmin.php?user=toto&pass=titi le login et mot de passe sont transmis comme paramètres à PHP, donc c'est à toi de coder l'authentification dans ton script


--------------------
PMEmail Poster
Top
chacal3
Ecrit le : Vendredi 29 Avril 2005 à 18h45
Quote Post


Ouf
*

Groupe : Membre
Messages : 296


QUOTE (Sinclair @ 29 Apr 2005, 14:08 )
Chacal3 : Le login et le mot de passe à valider sur la page me semble bizare vu que la page va être appelée depuis une crontab.
Tu parlais d'un formulaire ou d'autre chose ?

Je pars du principe qu'on puisse faire plusieurs choses à la fois avec une seule page.

1°) lancement d'une page automatique par un site annexe (cron par exemple)

2°) lancement manuel de cette même page dans l'éventualité que le webcron en question plante (tombe en panne, problème de trafic, etc...)

3°) en cas de lancement manuel, que le webcron ne vienne pas retourner une nouvelle fois le tour

4°) que n'importe quel clampin ne vienne pas lancer la page en question.


===>
Disons que ta page est www.toto/admin/tour.php

Rajoute ceci dans le lien pour le cron : www.toto/admin/tour.php?login=titi&mdp=tutu
Et met un formulaire (avec un login et un mdp) dans la page pour une utilisation manuelle.

Comme ça, si un gars se pointe et qu'il fait :www.toto/admin/tour.php

Il devra :
- faire sauter ta protection primaire (.htaccess, etc...)
- ET la 2e protection.

(il peut avoir du bol une fois mais pas 2. Vu l'importance de faire tourner un tour, mettre 2 protections au lieu d'une n'est jamais inutile).


A+

Chacal3


--------------------
Vous pouvez m'appeler MAAAÎTRE, je ne me vexerai pas... :)
PMEmail Poster
Top
Sinclair
Ecrit le : Lundi 02 Mai 2005 à 13h31
Quote Post


Pro
*

Groupe : Membre
Messages : 133


QUOTE (Haiken @ 29 Apr 2005, 15:15 )
Comme indiqué dans ton article, il faut InnoDB  innocent.gif :

QUOTE
Requirements for this Article

MySQL and PHP installed on a local or remote server.
Knowledge of using the MySQL Monitor program.
MySQL connectivity using PHP.
MySQL Version 4.0.12 using InnoDB type tables

Arf ... y'a des jours où je me mettrais des baffes !

Bon, voyons voir comment installer InnoDB ... à première vue, j'ai l'impression qu'il s'agit d'une option lors de l'installation de MySQL.

Mais dans mon souvenir, je ne me souviens pas avoir installé MySQL (j'utilise easyPHP et phpMyAdmin).

D'autre part, je me demande si mon FAI (free) accepte l'utilisation des tables innoDB ?

A vrai dire, j'hésite un peu à me lancer la dedans vu que mes besoins de performance sont très léger, je cherchais juste un moyen de rendre plus robuste l'execution automatique des tours unsure.gif


Sinon, merci pour vos réponses.

Chacal3 ... ta méthode de sécurisation me convient trés bien ... je vais faire ça.

Dernière chose ... c'est comment pour faire un dump de la base en php ?
J'en ai marre du copier/coller depuis phpMyAdmin whistling.gif


--------------------
Concepteur/Développeur de guildes.jpc.free.fr
PM
Top
bibi.skuk
Ecrit le : Lundi 02 Mai 2005 à 15h11
Quote Post


Pro
*

Groupe : Membre
Messages : 64


ça m'a l'air très complexe tout ça...

tu peux aussi simplement faire un script du genre :
CODE

if( GetIp( ) == ip_de_webcron )
{
  faire_un_nouveau_tour( );
}


ou GetIp( ) est une fonction qui recupere l'IP du client qui execute la page...

Comme ca, il n'y a que Webcron qui peut executer ce script...
PM
Top
Sinclair
Ecrit le : Lundi 02 Mai 2005 à 16h02
Quote Post


Pro
*

Groupe : Membre
Messages : 133


hum .... voici un méthode qui me semble très rapide et très propre !

Merci bibi.skuk thumbsup.gif


... sinon, j'en profite pour répondre à ma propre question
(comme ça, ça peut servir à d'autre)
Y'a des scripts comme xtdump qui permettent de faire un dump d'une base de donnée en php ... voila laugh.gif


--------------------
Concepteur/Développeur de guildes.jpc.free.fr
PM
Top
bibi.skuk
Ecrit le : Mardi 03 Mai 2005 à 08h19
Quote Post


Pro
*

Groupe : Membre
Messages : 64


QUOTE (Sinclair @ 2 May 2005, 15:02 )
hum .... voici un méthode qui me semble très rapide et très propre !

Merci bibi.skuk thumbsup.gif


... sinon, j'en profite pour répondre à ma propre question
(comme ça, ça peut servir à d'autre)
Y'a des scripts comme xtdump qui permettent de faire un dump d'une base de donnée en php ... voila laugh.gif

tu peux rajouter pas mal d'autres trucs par dessus, mais cela me semble quand même le plus secure...
PM
Top
Sinclair
  Ecrit le : Mercredi 04 Mai 2005 à 11h24
Quote Post


Pro
*

Groupe : Membre
Messages : 133


ok, merci bibi.skuk thumbsup.gif

Bon, faut que je m'y prenne méthodiquement.

Je dois dans l'ordre :
- Générer automatiquement des dumps
- Tracer les résultats des tours dans des fichiers de logs
- Passer la gestion des tours en automatique.

Première étape : les dumps
==================

Alors, j'ai installé un script nommé XTDump qui marche trés bien, l'inconvénient c'est que les fichiers créés ont le même nom, donc un dump va écraser le précédent ce qui ne me convient pas.

L'idéal sera que je génère mes dump moi même, mais après lecture de mes docs favorites, je n'ai pas trouver de fonction mysql (en php) qui me permettrais d'exporter mes tables dans des fichiers du genre : dump_050504.sql

Une astuce ?


--------------------
Concepteur/Développeur de guildes.jpc.free.fr
PM
Top
pascaltje
Ecrit le : Mercredi 04 Mai 2005 à 13h17
Quote Post


Ouf
*

Groupe : Membre
Messages : 242


QUOTE (Sinclair @ 4 May 2005, 10:24 )
ok, merci bibi.skuk thumbsup.gif

Bon, faut que je m'y prenne méthodiquement.

Je dois dans l'ordre :
- Générer automatiquement des dumps
- Tracer les résultats des tours dans des fichiers de logs
- Passer la gestion des tours en automatique.

Première étape : les dumps
==================

Alors, j'ai installé un script nommé XTDump qui marche trés bien, l'inconvénient c'est que les fichiers créés ont le même nom, donc un dump va écraser le précédent ce qui ne me convient pas.

L'idéal sera que je génère mes dump moi même, mais après lecture de mes docs favorites, je n'ai pas trouver de fonction mysql (en php) qui me permettrais d'exporter mes tables dans des fichiers du genre : dump_050504.sql

Une astuce ?

le truc c'est de définir l'endroit où sera créé le dump (et écrasé à chaque fois) puis en plus du dump lancer un processus de copie du/des fichier/s créé/s vers un autre répertoire avec le nom qui va bien, du genre: dump_050504.sql

A+

Pascal


--------------------
PMEmail PosterUsers Website
Top
Sinclair
Ecrit le : Mercredi 04 Mai 2005 à 13h30
Quote Post


Pro
*

Groupe : Membre
Messages : 133


ouaip .... bonne idée ! thumbsup.gif

Si je comprend bien, il me reste plus qu'a mettre un deuxième script en crontab (10 minutes après le premier) qui copira mon dump avec un nom à moi.

Nikel ! ... je m'y met de suite ...

Merci pascaltje


--------------------
Concepteur/Développeur de guildes.jpc.free.fr
PM
Top
« Sujets + anciens | Programmer | Sujets + récents »

Reply to this topicStart new topicStart Poll