JeuWeb - Crée ton jeu par navigateur
Histoire d'éxécution ?... - 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 : Histoire d'éxécution ?... (/showthread.php?tid=4443)

Pages : 1 2 3


Histoire d'éxécution ?... - Unkof - 16-11-2009

Bonjour,

Une question sur le mode d'exécution exact de php.

On va dire que j'ai 2 connectés, que j'appelle inter1 et l'autre inter2.

Est-il possible que inter1 exécute un script, que inter2 qui arrive après exécute le même script alors que inter1 n'a pas encore fini son exécution ?

J'avais cru comprendre que Php était Monothread, donc qu'un seul connecté pouvait exécuter le même script ?

Qu'est ce qui se passe exactement si en cours d'exécution d'un script, le connecté rafraichi la page ? Le script est fini et recommencé par Php, ou il fait un arrêt en cours de script (me semble qu'il fini, mais j'aimerai bien une certitude .. ^^) ?

J'ai journalisé des actions sur mon jeu dans un fichier ascii, et j'ai eu la désagréable surprise de voir que des fois, il commence 2 fois la même chose en même temps (imbriqué !?), il fini correctement 2 fois les mêmes actions, et il n'y a pas d'erreur de code, d'ou mes questions ?

Une âme charitable pourrait éclairer ma lanterne ?


RE: Histoire d'éxécution ?... - Anthor - 16-11-2009

Apache lance plusieurs fois php ? Remarque sinon, ce serait compliqué si on pouvait n'avoir qu'un visiteur unique à chaque fois ! Pauvre internet !

Concrètement, php ne fait rien pour la transmission, c'est apache, php ne sert qu'a interpréter et renvoyer un fichier.


RE: Histoire d'éxécution ?... - Unkof - 16-11-2009

Oui je sais Anthor.

Mais ca ne me dit pas si le même script peut être lancé en même temps par 2 internautes et exécutés en même temps (donc les 2 en parallèle) ou si ils sont exécutés l'un après l'autre .. Confused


RE: Histoire d'éxécution ?... - Anthor - 16-11-2009

Si tu savais tu aurais compris.
Je réitère, 100 personnes arrivent sur Amazon, les 100 personnes reçoivent l'accueil, ou chacune des 100 personnes attend son tour ?
Bon sinon monothread, ça ne veut pas dire, que tu ne peux pas lancer plusieurs fois l'application, mais que chaque processus de l'application ne peut exécuter qu'une de ces fonctions à la fois.


RE: Histoire d'éxécution ?... - QuentinC - 16-11-2009

Ton script peut être exécuté plusieurs fois simultanément.

Citation :Qu'est ce qui se passe exactement si en cours d'exécution d'un script, le connecté rafraichi la page ?
Ca dépend. cf. directive ignore_user_abort. Par défaut, si je ne me trompe pas, le script continue. De toute façon, c'est peu probable d'interrompre un script puisqu'il s'exécute normalement très rapidement.


RE: Histoire d'éxécution ?... - Unkof - 16-11-2009

Ok.

Donc, comment peut-on bloquer la gestion des évènements pour que ce ne soit exécuter qu'une seule fois ?

En gros, j'ai un script evenement qui me gère tous les évènements du jeu lorsqu'ils arrivent à terme.

Comment faire pour être sûr qu'un seul joueur n'effectue les opérations ?

On va dire que j'ai la construction d'un batiment qui est fini. 2 joueurs sont connectés, les 2 lances le script de traitement en même temps.

Un truc du style:

if(construction==fini)
{
.. je regarde ce que je dois construire (select de table)
.. je construit mon batiment, je modifie la table des batiment (update de table)
.. j'efface l'evenement de construction en cours (delete de table)
.. c'est fini
}

Comment empecher alors que mon test construction==fini ne soit exécuté 2 fois par 2 joueurs différents ??

Ca m'arrive en gros 1 fois par mois .. mais ca m'arrive, et ca me saoule.

Quelqu'un aurait une solution ? ... vous faites comment ?


RE: Histoire d'éxécution ?... - nicodd - 16-11-2009

D'emblée, je vois pas comment deux joueurs différents pourraient accéder à une condition ne concernant de toute évidence qu'un seul joueur.

Ensuite, vois du coté des transactions SQL, qui sont indispensable pour gérer sérieusement ce genre de problème.


RE: Histoire d'éxécution ?... - Allwise - 17-11-2009

Tu sembles avoir un problème de conception dans ton jeu.
T'as un script qui peut-être lancé par tout le monde ET qui gère les événements de tout le monde ?
Soit tu as un script qui gère les événements de tout le monde, et ce script ne peut-être lancé par personne. Il est lancé par une tâche cron.
Soit tu as un script qui ne peut être lancé que par l'utilisateur connecté, et qui n'agit que sur les événements de cet utilisateur.

Mais là avec un mixe des deux tu as une véritable erreur de conception et tu n'arriveras à rien de bon, faut que tu changes de système.


RE: Histoire d'éxécution ?... - Ter Rowan - 17-11-2009

(17-11-2009, 01:07 AM)Allwise a écrit : Tu sembles avoir un problème de conception dans ton jeu.
T'as un script qui peut-être lancé par tout le monde ET qui gère les événements de tout le monde ?
Soit tu as un script qui gère les événements de tout le monde, et ce script ne peut-être lancé par personne. Il est lancé par une tâche cron.
Soit tu as un script qui ne peut être lancé que par l'utilisateur connecté, et qui n'agit que sur les événements de cet utilisateur.

Mais là avec un mixe des deux tu as une véritable erreur de conception et tu n'arriveras à rien de bon, faut que tu changes de système.

tu peux aussi envisager d'avoir un script qui n'est lancé par le premier venu que s'il n'a encore jamais (sur la période donnée) été lancé par personne d'autres (pour éviter un cron)

enfin tout dépend de la taille du kiki euh du script et tout et tout :p


RE: Histoire d'éxécution ?... - php_addict - 17-11-2009

tache cron sous linux
tache at.exe sous windows

Wink