JeuWeb - Crée ton jeu par navigateur
Java EE (site web/ jeu par naviguateur) - 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 : Java EE (site web/ jeu par naviguateur) (/showthread.php?tid=5490)

Pages : 1 2 3 4


RE: Java EE (site web/ jeu par naviguateur) - niahoo - 14-06-2011

c'est juste que par rapport à ce que je disais au dessus c'est à côté de la plaque, mais par contre je compte bien m'en servir sur des requêtes lourdes oui.

Je cherche à avoir des objets persistants !


RE: Java EE (site web/ jeu par naviguateur) - Sephi-Chan - 14-06-2011

Quels genre d'objets voudrais-tu voir persister ?

Aucun des langages que j'ai utilisé jusque là ne permet d'avoir des variables prédéfinies (en dehors des variables d'environnement, bien sûr). Cela dit, je ne trouve pas ça contraignant de récupérer des données dans un cache.



RE: Java EE (site web/ jeu par naviguateur) - niahoo - 14-06-2011

Ben avec rails, quand tu lances ton serveur, ton fichier de routes est parsé une fois et reste en RAM non ? PHP, lui, doit le reparser à chaque fois.
Alors effectivement ce n'est pas contraignant de le mettre dans un cache, je disais simplement que ça n'apporte que de la performance, mais en fait ça reste une DB comme une autre.

Un exemple d'objet persistant ?
Par exemple le personnage d'un joueur. Ça évite que à chaque fois qu'on veut lui faire faire quelque chose on aie à le charger de la DB, il *est* là, et ça permettrait donc d'architecturer l'application d'une façon différente : par exemple, tu attaques un joueur, tu lui balances une flèche, l'application résolut l'impact et te push l'info [ok, cible touchée], et ta requête ajax est finie. Mais pendant ce temps, l'objet Personnage, lui, continue de calculer les dégâts, les différentes parties de son corps touchées, etc.. et si le joueur touché est connecté, on les lui push, sinon non, et ensuite on mets à jour les données en base.

ça prend 5 minutes à mettre ça en place avec un framework erlang (au hasard Wink ), tandis que là on est obligés de faire beaucoup d'entrées sorties dans la base pour pas grand chose.


RE: Java EE (site web/ jeu par naviguateur) - Sephi-Chan - 14-06-2011

Ben, quel que soit le framework, le serveur Web charge les fichiers en RAM : c'est pour ça que quand on change des fichiers, il faut le relancer (restart ou graceful sur Apache).

Pour créer le comportement que tu décris, c'est relativement trivial : tu stockes ton objet dans un data store tel que Redis, Memcache ou APC.


@target = Rails.cache.fetch('users:24') { User.find(24) }
current_user.attack(@target)

Ici, tu n'es pas passé par la base de données (à condition que l'utilisateur 24 soit déjà dans le data store). Ton objet @target est stocké quelque part (dans Redis ou Memcache, par exemple) et tu le manipules comme tu le souhaites (en prenant soin de le faire expirer du cache après l'avoir modifié).

Sinon, tu fais tourner un serveur persistant qui "pilote" le jeu à côté et dans lequel vivent toutes tes variables, et l'application Web en elle-même n'est là que pour discuter avec ce serveur de jeu.


RE: Java EE (site web/ jeu par naviguateur) - niahoo - 14-06-2011

(14-06-2011, 04:37 PM)Sephi-Chan a écrit : Sinon, tu fais tourner un serveur persistant qui "pilote" le jeu à côté et dans lequel vivent toutes tes variables, et l'application Web en elle-même n'est là que pour discuter avec ce serveur de jeu.

ben c'est ce que je fais avec erlang mais je pense qu'on peut approcher un comportement similaire avec php (pour de petites applis bien sûr)


RE: Java EE (site web/ jeu par naviguateur) - Ter Rowan - 14-06-2011

ce serait intéressant que les "experts" construisent un système de ce genre (avec les interfaces/appels nécessaires entre joueur et "serveur persistant")

je pense qu'on pourrait effectivement beaucoup y gagner pour des jeux complexes/riches


RE: Java EE (site web/ jeu par naviguateur) - php_addict - 15-06-2011

Donc voici ma petite fonction qui renvois un objet dans le cache d'apc si il existe,
sinon il le met en cache et le renvois,
et si APC n'est pas installé la fonction renvois l'objet demandé




$cache_object_name = 'objet_a_la_con' ;
$callback_function_name = 'fonction_a_la_con';
$param_array = array ($param1 , $param2);
$duree_cache = 3600;
//
$data = get_object_from_apc_cache($cache_object_name , $callback_function_name , $param_array , $duree_cache);

echo $data;

fonction_a_la_con($param1 , $param2)
{
return($param1 + $param2);
}


//_________________________________________
// function get_object_from_apc_cache |
//_________________________________________|
//
// DESCRIPTION: - retourne un objet stocké dans le cache d'APC , si l'objet n'existe pas dans le cache alors il est sera mis dans le cache
// - si APC n'est pas installé alors l'objet demandé est retourné
//
// PARAMETRES:
//
// $cache_object_name string --> le nom de l'objet dans le cache d'APC
// $callback_function_name string --> le nom de la function de calback qui va créer l'objet si il n'existe pas dans le cache ou si APC n'est pas installé
// $param_array array --> les paramètres de la function callback
// $duree_cache int --> durrée de vie du cache
//
// SORTIE: l'objet du cache demandé
//
// AUTEUR: php_addict on jeuweb.org
//
function get_object_from_apc_cache($cache_object_name , $callback_function_name , $param_array , $duree_cache)
{
//_____________________
// si APC est détecté |
//_____________________|
if(function_exists('apc_exists'))
{
//______________________________________________________________________________________________
// si le l'objet $cache_object_name en cache n'existe pas on le créé avec la function callback |
//______________________________________________________________________________________________|
if (!apc_exists($cache_object_name))
{
$data = call_user_func_array($callback_function_name,$param_array); // on créé l'objet avec la function de callback
apc_add($cache_object_name , $data , $duree_cache ); // on stocke l'objet dans le cache pendant $duree_cache secondes
}
//_________________________________________________________________________
// si le l'objet $cache_object_name en cache existe on le recupere |
//_________________________________________________________________________|
else
{
$data =apc_fetch($cache_object_name);
}
}
//___________________________________________________________________________
// si APC n'est pas détecté on renvois les donnée avec la function callback |
//___________________________________________________________________________|
else
{
$data = call_user_func_array($callback_function_name,$param_array);
}
return($data);
}