[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) |
RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - niahoo - 06-12-2011 (06-12-2011, 12:58 AM)niahoo a écrit : Le truc c'est que tu ne dois pas aller vers une page qui attend qu'un job soit terminé, sinon pourquoi utiliser une queue puisque le joueur devra là aussi subir des chargements longs (on le chouchoute un peu le joueur là non ?). Si tu gères avec des rafraîchissements de page, reste synchrone. Ou sinon, comme il dit embrasse le modèle en entier. RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - php_addict - 06-12-2011 (06-12-2011, 09:53 AM)Sephi-Chan a écrit : Ça doit être l'enfer de programmer avec ta paranoia de la race condition. euh non...c'est assez structurant au contraire (06-12-2011, 09:53 AM)Sephi-Chan a écrit : Actuellement, comment est-ce que tu vérifies que le joueur a assez de ressources pour construire un bâtiment ?Et comment t'assures-tu qu'il n'en a pas perdu entre le moment où tu vérifies s'il a les ressources nécessaires et celui où tu mets à jour les ressources pour payer la construction ? je créé une action "demande de construction" résolue immédiatement si tout est ok, et si tout est ok cela créé l'action "construction en cours" je pense que je vais rester synchrone, je ferais bien si ca coince le jour où il y aura 20000 joueurs (si seulement...) J'avais fais quelques test avec des PNJ robotisés et les race condition sont assez probable en fait...il suffit d'un script un peu lent et patatrac... je pense que gérer les races condition est quand même important même pour un jeu amateur... RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - atra27 - 06-12-2011 Sinon quand tu demande la construction, tu crée directement l'action construction en cours C'est plus logique que de passer par une action intermédiaire! Sinon pourquoi pas faire: Action demande de construction->action retire les ressources->action lance la construction->action fini la construction->action active le batiment->etc... Bref c'est pas vraiment justifié dans ce cas... RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - Sephi-Chan - 06-12-2011 (06-12-2011, 12:08 PM)php_addict a écrit : je créé une action "demande de construction" résolue immédiatement si tout est ok, et si tout est ok cela créé l'action "construction en cours" Mais qu'est-ce qui s'y passe ? Tu verrouilles la table, tu entames une transaction, tu vérifies si le joueur a assez de ressources. Si oui, tu continues le processus et tu soustrait les ressource au joueur, puis tu lui donne le bâtiment. Enfin tu termines ta transaction et tu déverouilles ta table. C'est ça ? RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - php_addict - 06-12-2011 (06-12-2011, 01:34 PM)Sephi-Chan a écrit : Mais qu'est-ce qui s'y passe ? Tu verrouilles la table, tu entames une transaction, tu vérifies si le joueur a assez de ressources. Si oui, tu continues le processus et tu soustrait les ressource au joueur, puis tu lui donne le bâtiment. Enfin tu termines ta transaction et tu déverouilles ta table. C'est ça ? oui et avant la transaction je change le niveau d'isolation par defaut de mysql car par defaut il permet des lectures de lignes fantomes (LEVEL REPEATABLE READ)
et un rollback au cas où... RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - Sephi-Chan - 06-12-2011 Ok, je vois. Tu es la première personne que je vois faire ce genre de choses. ^^ RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - php_addict - 06-12-2011 Il y a 2 façons de faire si j'ai bien compris pour la résolution des actions d'un webgame: - assynchrone / job queue - synchrone / transaction pour ma part c'est les transactions, et si je change le niveau d'isolation de mysql ce n'est pas par paranoia, c'est que j'ai fait des tests: - tu ouvre 2 navigateur web A et B - Le joueur du navigateur A attaque B - sur les deux navigateurs il y a un chrono et quand il arrive à zéro cela reload la page web et lance la transaction de résolution --> il peut y avoir une "race condition" et selon mes tests, avec le niveau d'isolation par défaut de mysql, il est possible que la résolution ne se passe pas bien du tout même avec une transaction, car le niveau d'isolation "LEVEL REPEATABLE READ" permet la lecture de ligne fantômes je ne pense pas que je me prenne la tête pour rien, vu qu'avec seulement 2 navigateurs web ouverts il est assez facile d'avoir ce genre de soucis... --> http://sqlpro.developpez.com/isolation-transaction/ (c'est du SQL et pas MySQL mais c'est pareil.) évidement faut pas mettre le niveau d'isolation le plus élevé par défaut sinon ca te pose des verrous par tout et tout le temps et ca rame grave... sincèrement je pense que ceux qui utilisent le système "synchrone / transaction" pour la résolution des actions devraient faire leurs tests sur les niveaux d'isolation des transaction mysql... RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - kasou - 06-12-2011 Quelque est la probabilité qu'il y ai une "race condition" ? Il faudrait que 2 joueurs fassent une action exactement en même temps, si j'ai bien compris ? kasou RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - niahoo - 06-12-2011 (06-12-2011, 06:34 PM)php_addict a écrit : je ne pense pas que je me prenne la tête pour rien, vu qu'avec seulement 2 navigateurs web ouverts il est assez facile d'avoir ce genre de soucis... à lire ça je pourrais penser que le problème vient de ton architecture et pas des réglages de mysql. RE: [PHP] Resque ou Rediska et Redis : je rame complétement... - Sephi-Chan - 06-12-2011 Entièrement d'accord avec Niahoo. Tu dois avoir un problème de conception ou d'architecture pour avoir de tels problèmes. Ou alors tu es un développeur hypocondriaque. Ce serait cool que tu fasses une petite application de démonstration. Vu que tu as déjà les problèmes, tu n'as qu'à extraire cette partie et nous transmettre l'archive. |