Estoy usando un sistema de entidad para mi servidor MMO y estaba pensando en definir el comportamiento de las "acciones" usando los scripts de Lua. El servidor está escrito en C ++. No estoy muy familiarizado con el uso de la velocidad / memoria de Lua en C ++, pero lo he usado para crear secuencias de comandos de la GUI del cliente. ¿Usar Lua para definir la lógica del juego en el lado del servidor reduciría mucho el rendimiento?
10
Respuestas:
TL; DR: Lua tiene gastos generales, pero si se usa correctamente es insignificante y fácil de mitigar. No lo use para operaciones matemáticas pesadas o geometría transformadora. Probablemente no verá ningún problema de rendimiento en absoluto al usarlo para escribir una GUI.
He hecho algunos puntos de referencia básicos con respecto al rendimiento de Lua como lenguaje de programación de juegos, y es bastante rápido. Usando tolua ++ para vincular LuaJIT a mi motor de juego, generé 2,000 actores, cada actor controlado por un script Lua llamado cada bucle de juego (con un argumento de tiempo-delta). La mitad de los actores tenía un guión de congregación y la otra mitad estaba haciendo una especie de caminata aleatoria (y el rebaño los evitó).
Apagar el componente de renderizado me dio un poco más de 400 tics por segundo en mi Opteron 170 (2x2.0GHz, aunque mi motor tenía un solo subproceso en ese momento). Me imagino que podría haber exprimido un poco más que eso si me interesara y optimizase, quizás moviendo parte del trabajo pesado a C ++. La actualización de 2000 actores 400 veces por segundo todavía era bastante impresionante, y superó con creces mis expectativas en ese momento.
Ahora uso Lua en todos mis proyectos, y en realidad constituye una porción bastante grande del código real del juego (AI, diseño / lógica GUI, Eventos / Mensajes). Hacer juegos es MUCHO más divertido cuando puedes cambiar algo rápidamente y probarlo sin tener que salir, volver a compilar y reiniciar. Me he encontrado con algunos problemas de rendimiento de vez en cuando, pero estos se resuelven fácilmente al volver a implementar el código ofensivo en C ++ (y luego llamarlo desde Lua).
Aunque un poco fuera de tema, los servidores de EVE Online están escritos casi por completo en Python apilable (creo que difieren la mayoría de sus operaciones matemáticas a una biblioteca C ++), que es considerablemente más pesado que Lua y, según mi propia investigación personal y varias disponibles puntos de referencia, mucho menos rendimiento que LuaJIT. Se las arreglan para manejar más de 30k jugadores simultáneos sin demasiados problemas. De acuerdo, tienen una tonelada de hardware costoso que ejecuta todo eso, pero creo que la mayoría del costo está en su grupo de bases de datos ...
Disculpas por el muro de texto.
fuente
Respuesta corta: Sí, sí lo haría.
Respuesta larga: depende de cuánta lógica del juego, cuánto se ejecuta y cuán complejo es, y si necesita ejecutarlo para cada jugador. Si es muy simple y no se repite mucho, podría estar bien con eso. Pero para la mayoría de los casos, usar LUA en lugar de C ++ le dará un rendimiento mucho más bajo y se escalará mal, suponiendo, por supuesto, que el código esté bien diseñado y optimizado.
fuente