CPU o RAM en el desarrollo de juegos?

Estoy empezando a trabajar en un servidor de juegos escrito en Java. Por supuesto, Java no es la mejor solución para el desarrollo de servidores, pero es el lenguaje con el que me siento más cómodo.

Estoy tratando de diseñar este servidor de juegos para manejar muchas conexiones, y no estoy seguro de en qué enfocarme más: ¿almacenar datos en la memoria o mantener bajo el uso de la memoria y usar más potencia de CPU sin procesar?

preguntado el 27 de agosto de 11 a las 20:08

Esta es una pregunta bastante genérica, así que aquí hay una respuesta genérica: use tanta memoria como sea viable y sacrifique tiempo para manejar cantidades de datos que requieren más memoria. -

¿Por qué reinventar la rueda? A menos que ese sea tu objetivo, por supuesto :) Echa un vistazo al sucesor del Proyecto Darkstar, Servidor RedDwarf. -

2 Respuestas

Ciertamente depende de cómo sea tu juego. Recientemente, comparé mi servidor con 5,000 clientes a 20 MB de RAM. Es posible que conserve muchos más datos estatales que yo, y podría ser una preocupación.

Su problema grave con muchas conexiones es configurar los sockets para manejarlo correctamente, el uso de cierta forma de manejo de sockets se atasca mucho o rompe las conexiones @ 1024, etc. No estoy seguro de cuánta optimización puede hacer en Java.

Revisa este link por lo que estoy hablando.

¡Y buena suerte! Y también, cambie de idioma lo antes posible a un idioma que ofrezca características comparables a Java pero sin los terribles inconvenientes (es decir, Objective-C o C #). No solo estoy "criticando java", sino que el problema al que se va a llegar cuando hable de hacer cosas que son eficaces es que java lo abstraerá demasiado del sistema operativo y no podrá aprovechar las optimizaciones. Cuándo lo necesitas.

Respondido 28 ago 11, 00:08

gracias, agradezco tu respuesta! Estoy usando una biblioteca llamada KryoNet (code.google.com/p/kryonet) para la gestión de sockets, que está altamente optimizado y creado principalmente para el desarrollo de juegos Java. Saldré de Java lo antes posible, como me recomendó. - qrokodial

Hay formas de usar Java y aún obtener las optimizaciones del sistema operativo. Podría encapsular el trabajo pesado en bibliotecas nativas y llamarlas usando JNI. - jkeeler

@Abrupt, una explicación para respaldar mi sugerencia es que escribí mi motor de juego en un idioma (C ++) y decidí reescribirlo en otro idioma (Objective-C) cuando estaba ~ 50% hecho. Déjame decirte que me tomó muchos más de lo que esperaba para lograr esto. Mi lección fue definitivamente "comienza como te propongas". Si hay otro idioma que te gustaría aprender, esta será una excelente manera de aprender a usar ese idioma. Si esperas que volverás a escribir más tarde, podrías estar creando un lío para ti. Buena suerte para ti - Nektarios

No le sugiero que diseñe el servidor por mucho más de lo que realmente necesita. Si de repente descubre que tiene 10,000 clientes, puede rediseñar el sistema.

Comenzaría con un servidor básico, por ejemplo, i5 con 8 GB de memoria por menos de £ 500, o un i7 con 24 GB por menos de £ 1000.

A medida que aumenta su número de conexiones, es probable que se quede sin ancho de banda antes de quedarse sin recursos, a menos que utilice una solución en la nube.

Por cierto: puede implementar un sistema de negociación de alta frecuencia con menos de 100 microsegundos de latencia en Java. No he oído hablar de ningún sistema de negociación de alta frecuencia Objective-C. C # podría funcionar igual o mejor en Windows, pero prefiero Linux como sistema de servidor.

Respondido 28 ago 11, 00:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.