J'utilise un système d'entités pour mon serveur MMO et je pensais à définir le comportement des "actions" à l'aide de scripts Lua. Le serveur est écrit en C ++. Je ne suis pas très familier avec l'utilisation de la vitesse / mémoire de Lua en C ++ mais je l'ai utilisé pour créer des scripts pour l'interface graphique du client. Est-ce que l'utilisation de Lua pour définir la logique du jeu côté serveur réduirait considérablement les performances?
10
Réponses:
TL; DR: Lua a des frais généraux, mais s'il est utilisé correctement, il est négligeable et facilement atténué. Ne l'utilisez pas pour des opérations mathématiques lourdes ou pour transformer la géométrie. Vous ne verrez probablement aucun problème de performances en l'utilisant pour créer un script pour une interface graphique.
J'ai fait quelques repères de base concernant les performances de Lua en tant que langage de script de jeu, et c'est sacrément rapide. En utilisant tolua ++ pour lier LuaJIT à mon moteur de jeu, j'ai engendré 2000 acteurs, chaque acteur contrôlé par un script Lua appelé chaque boucle de jeu (avec un argument temps-delta). La moitié des acteurs avaient un scénario de flocage et l'autre moitié faisait une sorte de marche aléatoire (et a été évitée par le troupeau).
Désactiver le composant de rendu m'a donné un peu plus de 400 ticks par seconde sur mon Opteron 170 (2x2.0GHz, bien que mon moteur était à filetage unique à l'époque). J'imagine que j'aurais pu faire un peu plus que cela si j'avais creusé et optimisé, peut-être en replaçant une partie du travail lourd en C ++. Mettre à jour 2000 acteurs 400 fois par seconde était encore assez impressionnant et dépassait de loin mes attentes à l'époque.
J'utilise maintenant Lua dans tous mes projets, et il constitue en fait une assez grande partie du code de jeu réel (IA, disposition / logique de l'interface graphique, événements / messages). Faire des jeux est BEAUCOUP plus amusant quand vous pouvez rapidement changer quelque chose et le tester sans avoir à quitter, recompiler et réinitialiser. J'ai rencontré de temps en temps des problèmes de performances, mais ceux-ci sont facilement résolus en réimplémentant le code incriminé en C ++ (puis en l'appelant depuis Lua).
Bien que légèrement hors sujet, les serveurs d'EVE Online sont écrits presque entièrement en Stackless Python (je crois qu'ils reportent la plupart de leurs opérations mathématiques à une bibliothèque C ++), ce qui est considérablement plus lourd que Lua et, d'après mes propres recherches personnelles et plusieurs disponibles des références, beaucoup moins performantes que LuaJIT. Ils parviennent à gérer plus de 30 000 joueurs simultanés sans trop de problèmes. Certes, ils ont une tonne de matériel coûteux qui exécute tout cela, mais je pense que la majorité du coût est dans leur cluster de base de données ...
Toutes mes excuses pour le mur de texte.
la source
Réponse courte: oui, oui.
Réponse longue: cela dépend de la logique du jeu, de son exécution, de sa complexité et de la nécessité de l'exécuter pour chaque joueur. Si elle est très simple et ne se répète pas souvent, cela pourrait vous convenir. Mais dans la plupart des cas, l'utilisation de LUA au lieu de C ++ vous donnera des performances beaucoup plus faibles et évoluera mal, en supposant bien sûr que le code est bien conçu et optimisé.
la source