J'ai pas dis "hyper performant", j'ai juste dis "performant".
J'entends par là quelque chose qui puisse tourner correctement, qui reste fluide.
Il est plus facile et plus productif de programmer en Java / C#.
Ces langages (en particulier J2EE et .Net ) sont plus orienté serveur.
Les serveurs d'applications qui les fond tourner gèrent facilement le load balancing.
Les langages compilés sont plus utilisés pour les traitements où le temps de calcul et crucial ( affichage 3D, calcul physique, IA ).
Les langage de script sont préférés pour leur modularité: il n'est pas nécessaire de recompiler l'application pour effectué des modifications.
Sur un serveur, bien utilisé, il n'est même pas nécessaire de le redémarrer. Et une mise à jour sans interruption de service, on ne crache jamais dessus !
Donc oui, je maintient: il est préférable pour utiliser plusieurs langages.
Concernant la performance, il est toujours préférable d'avoir une application qui tourne vite:
- pour avoir de la marge
- car on ne sait pas quels autre processus tourne en plus (80% des Windows ont plus de 50 processus en utilisation, alors que moins d'une trentaine est utilisé par Windows)
- car on ne connait pas les performance de la machine sur laquelle le logiciel va tourner
Alors certes, il ne sert à rien d'avoir une jeu qui tourne à 200 FPS.
Pourtant, 200 FPS, c'est ce qu'on peut obtenir avec un PC récent sur un jeu comme Guild Wars, là où certains vieux PC tournent à 30/40 FPS.
En cherchant de bonnes performance, on obtient une bonne mage qui permet de faire tourner l'application sur une plus grande gamme de machine.
Je déconseillerais par exemple de faire en jeu 3D en VB si c'est pour dépasser le domaine du casse brique. Les fonctions récursives, ce n'est pas son fort... je ne sais pas ce que peux donner la lecture d'un graphe de scène d'une map, remplis de 20 joueurs, 20 armes, 50 mob, 300 arbres etc... mais je doute que ce soit aussi rapide qu'un langage compilé.
Le langage compilé, venons en, je n'avais pas abordé le problème dans mon post au dessus.
Il est INDISPENSABLE. Non pas pour des raisons de performances, mais pour des raisons de sécurité.
Un script lisible, est un code susceptible d'être lu, et d'être détourné pour créer un programme de triche.
Un jeu 100% python par exemple, est de ce point de vue une absurdité (quoi que le python peut être un mauvais exemple, il me semble qu'il est possible de compiler les scripts).
Le deuxième problème, c'est le traitement gameplay qu'effectue le client. Il est beaucoup plus important qu'on pourrait le croire.... suivant le jeu.
Déjà, tout ce qui est du déplacement de son personnage est réalisé par le client.
Un moteur physique est également souvent présent. Que ce soit pour piloter des véhicules, ou pour calculer des trajectoires de projectiles, explosion etc...
Et c'est gourmand un moteur physique... d'ailleurs, la plupart des MMO n'en utilisent pas, ou très peu.
Mais pour des jeux multijoueurs plus "classique", on était souvent limité à une 20aine de joueur il y a une dizaine d'année.
Battlefield 2 n'en permettait que 64.
La puissance de calcul permet d'augmenter le nombre de joueurs, mais on est encore très loin des mmo.
Le problème majeur est "performance vs sécurité".
Si le client calcul lui même la position du joueur, et envois le résultat au serveur, on gagne en performance globale, car le serveur n'aura pas à calculer la position des joueurs connecté (ce qui peut revenir à des milliers des calculs évité).
Mais par contre, la faille se trouve au niveau du protocole réseau. Il "suffit" d'envoyer au serveur une mauvaise position et ce dernier va l'accepter sans rechigner (ainsi fonctionnent les "speed hack" et compagnie).
Pour une sécurité maximum, il faudrait en effet que le client n'ai à gérer que l'aspect graphisme, et de léguer au serveur toutes les opérations de gameplay.
Il lui incomberait alors de calculer lui même les déplacement des joueurs (en plus des mob et PNJ ). Si ces calculs sont réaliser par un moteur physique, c'est un temps considérable au niveau du processeur qui sera demandé (et on sera obligé de limiter le nombre de joueurs par map).
Et enfin, le dernier problème, le lag.
Dans le cas où le client ne réalise plus de calculs de gameplay, il devient encore plus dépendant du serveur, et les effets du lag seront encore plus important !
En effet, les "micro lag" ne sont généralement pas perceptibles. On commence à avoir des difficultés à combattre à partir de 400/500 ms.
Mais pas pour se déplacer...
Tout simplement car le client est autonome, et permet de jouer sans réponse du serveur pour toutes les actions de gameplay qu'il peut calculer lui même.
Si c'est le serveur qui calcul tout, le moindre lag de 200ms sera épouvantable.
Tout ça pour dire qu'au final, au delà du choix du langage, ce qui fait un "bon" mmo techniquement parlant, c'est avant tout la façon d'implémenter les opérations du gameplay suivant le type de jeu désiré.
|