JeuWeb - Crée ton jeu par navigateur
Exécuter les scripts "relativement lourd" sur le pc client ou serveur? - 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 : Exécuter les scripts "relativement lourd" sur le pc client ou serveur? (/showthread.php?tid=5646)

Pages : 1 2 3


Exécuter les scripts "relativement lourd" sur le pc client ou serveur? - Maz - 16-08-2011

Bonjour, dans un soucis de scalabilité, je me demandes si le script que je suis en train de coder (un algorithme A* sur une carte à tuile hexagonale) ne vaut pas mieux d'être codé en javascript(actuellement débuté en PHP), afin d’alléger un peu la charge du serveur et la répartir sur les pc client. Sachant que ce script seras exécuter régulièrement et même parfois boucler.

Je l'ai commencer en PHP car il est plus facile pour moi de récupérer les données des tuiles dans ma BDD, mais je pourrais très bien passer par Ajax pour transmettre ses données à Javascript mais là encore, ça alourdirais la charge du serveur ET la charge du navigateur client.

Merci d'avance pour vos avis.


RE: Exécuter les scripts "relativement lourd" sur le pc client ou serveur? - Hideaki - 16-08-2011

Si le personnage du joueur se déplace tout seul d'un point A à B c'est à ton serveur de le calculer du moins il est préférable,
Si le joueur peut modifier le déplacement prévue en cours de route ou donner lui même une direction, l'exécuter sur le poste client n'est pas une mauvaise solution.

A* n'est peut-être pas adapté à ton cas, il y a IDA* basé sur A* mais moins gourmand en mémoire, faire un agent comme pour le monde de Wumpus, etc


RE: Exécuter les scripts "relativement lourd" sur le pc client ou serveur? - php_addict - 16-08-2011

(16-08-2011, 01:09 PM)Maz a écrit : mais je pourrais très bien passer par Ajax pour transmettre ses données à Javascript mais là encore, ça alourdirais la charge du serveur ET la charge du navigateur client.

bah, de toute façon que cela soit en PHP ou JS/AJAX il va bien valoir que ton serveur récupère les donnée de ton graphe...

résoudre ton chemin côté client en JS, ok pourquoi pas, mais il va falloir que tu vérifie le chemin côté serveur de tout manière.

Est ce que tu code en C++ ? sinon il y a moyen de te faire un exécutable en C++ et tu pourra communiquer entre php et c++ (via des sockets je crois?) mais là c'est quand même bien balaise...si tu y parviens fais le nous savoir Wink


RE: Exécuter les scripts "relativement lourd" sur le pc client ou serveur? - Maz - 16-08-2011

Le chemin trouvé ne seras pas modifié, c'est juste pour calculer les chemins les plus court entre 2point & le stocké en base de donnée, puis les personnages ensuite se déplace sur ce chemin via un cron exécuté toute les X minutes.
Le chemin sera ensuite affiché au joueur s'il le désire sur la carte, mais là il n'y a plus d'Astar, juste un affichage d'un chemin stocké en BDD.

Je ne trouves pas beaucoup d'information sur IDA* que tu cites, aurais-tu des articles à me proposer?

Edit: php_addict> Il est vrai que je devrais vérifier le chemin... Double exécution d'un même script... Malheureusement mes connaissance en C sont vraiment basique ,/


RE: Exécuter les scripts "relativement lourd" sur le pc client ou serveur? - php_addict - 16-08-2011

(16-08-2011, 01:24 PM)Hideaki a écrit : il y a IDA* basé sur A*

ah, as tu des liens sur IDA* ? car chercher cela sur google est un calvaire (même si on tape IDA star)



RE: Exécuter les scripts "relativement lourd" sur le pc client ou serveur? - Hideaki - 16-08-2011

IDA* pour Iterative-Deepening A*, voici une liste des variantes de A*
http://en.wikipedia.org/wiki/A*_search_algorithm#Variants_of_A.2A

Après on peut toujours optimiser par rapport à ton cas Wink


RE: Exécuter les scripts "relativement lourd" sur le pc client ou serveur? - Sephi-Chan - 16-08-2011

Tu dois de toute façon faire le calcul des 2 côtés. Côté client pour que ce soit sympa pour l'utilisateur, puis côté serveur pour vérifier que le déplacement est bien possible.

Après, tu peux mémoriser les chemins (généralement dans un système de stockage par clé/valeur en RAM genre Memcache ou Redis). Exemple :


paris = City.find_by_name("Paris")
nimes = City.find_by_name("Nîmes")

key = [ "path", paris, nimes ]
path = Rails.cache.fetch(key) { paris.path_to(nimes) }

Si la clé n'existe pas, on exécute le code fourni dans le block et on le range dans le cache.

Après, tu peux peut-être transmettre les chemins précalculés à Javascript en les passant sous forme d'un objet JSON. Ça lui évitera le calcul dans bien des cas et ça finira d'ailleurs par couvrir 100% des calculs si ta map ne change pas.


RE: Exécuter les scripts "relativement lourd" sur le pc client ou serveur? - Maz - 16-08-2011

Je n'ai pas très bien compris la subtilité d'IDA*. Mon anglais est limité à tout ce qui n'est pas "jargon professionnel & mathématique". Je vais donc rester sur mon A* pour l'instant, je posterais surement ce soir ma class dans les ressources pour ceux qui désires faire du pathfinding sur case hexagonale.


RE: Exécuter les scripts "relativement lourd" sur le pc client ou serveur? - popayan - 16-08-2011

Niveau sécurité, ça n'est pas dangereux de placer ce genre de script coté client?


RE: Exécuter les scripts "relativement lourd" sur le pc client ou serveur? - Maz - 16-08-2011

Ce n'est qu'un calcul de chemin? Je ne vois pas ou serais la faille?