Voy a escribir un servidor para un multijugador en línea con estos requisitos:
- Juego basado en turnos bastante simple (piense en un juego de cartas) que se juega completamente en el servidor (razones de seguridad)
- Debe poder ejecutar múltiples juegos (mesas) con 4 jugadores por mesa, pero no se requiere un sistema de lobby (otro servidor se encarga de eso)
- Puede soportar tantos jugadores a la vez como sea posible; Podría necesitar múltiples servidores
- Chat entre jugadores
- Conexión de socket a un cliente Flash / AIR
- Debe poder comunicarse con otros servidores (para cuentas de jugador y demás)
Ahora, estoy considerando dos opciones:
- Smartfox (o equivalente)
- Una solución Java personalizada en algo como Tomcat
¿Por qué Smartfox?
- Maneja múltiples salas y chatea de forma nativa
- Presumiblemente tiene soluciones para problemas de juego multijugador bien conocidos.
¿Por qué personalizado?
- Smartfox tiene muchas funciones innecesarias, malas para el rendimiento
- Smartfox se comunica con un formato basado en XML, podría usar uno binario más eficiente.
- No sé si ejecutar el modelo de juego completo en el servidor es conveniente con el mecanismo de extensión de Smartfox
- Múltiples salas y chat son fáciles de reimplementar
- Tomcat o un contenedor ligero es más fácil de implementar que Smartfox
- Mejor soporte IDE para desarrollar en Tomcat (implementación automática, etc.)
¿Qué piensas? ¿Son correctas mis suposiciones? ¿Tienes algo que añadir? ¿Qué opción debo elegir (o tal vez una completamente diferente)?
networking
multiplayer
server
java
Bart van Heukelom
fuente
fuente
Respuestas:
Definitivamente iría con una solución personalizada: aunque puede perder algo de tiempo a corto plazo, definitivamente se escalará mejor si lo necesita, además la experiencia que obtenga será reutilizable de forma masiva para sus próximos juegos. BlazeDs suena como una herramienta excelente para sus necesidades, pero reescribir un servidor de juegos Java desde cero no es un gran esfuerzo, utilizando, por ejemplo, Netty y Protobuf :)
fuente
Con respecto a sus puntos en apoyo de una solución personalizada:
Como esto es para un juego "simple, basado en turnos", es poco probable que el rendimiento sea un problema.
Nuevamente, para los juegos simples basados en turnos, la facilidad de desarrollo puede tener prioridad sobre la eficiencia del formato, por lo que, a menos que desee desarrollar un formato binario eficiente, no lo haga.
Esta no es una buena razón para elegir implementar esta funcionalidad por su cuenta. Es algo que es reconfortante saber si decides seguir este camino.
Debe sopesar cuánto tiempo ahorra desarrollando una solución personalizada e implementándola rápidamente, en lugar de utilizar una solución existente y posiblemente realizar una implementación más larga. Lo más probable es que el tiempo de desarrollo compensará los pequeños beneficios que brinda una implementación más rápida / fácil.
Para resumir: recomiendo usar una solución existente, si es posible. Es probable que te ahorre mucho tiempo. En cuanto a qué solución preexistente, depende de usted.
fuente
Habiendo usado tanto SmartFox como ElectroServer bastante, siempre recomiendo ElectroServer. Hace todo lo mismo que SmartFox, pero es un poco más sólido e incluye soporte binario.
fuente
Recomiendo encarecidamente mirar el proyecto Google App Engine .
Tanto por alojamiento como por razones técnicas. Si su juego no es rápido, entonces ese debería ser un buen lugar para comenzar y funcionar, y tener el alcance para escalar.
El código puede estar en Python o Java.
Neptune's Pride está en Google App Engine. Vea una entrevista con el desarrollador aquí .
fuente
Echa un vistazo al siguiente servidor de juegos pequeños . Es compatible con un protocolo binario. Nota: ¡escrito por mí! Tiene soporte TCP y UDP, usa jetlang para mensajes extremadamente rápidos en vm.
fuente
Realmente deberías buscar en Firebase, un servidor Java de código abierto para juegos de varios jugadores.
En comparación con Smartfox, Firebase utiliza un protocolo binario, no está repleto de funciones y tiene un alto rendimiento.
Si ejecuta su propio sistema, tendrá que ocuparse de todo, desde el manejo de los sockets hasta el manejo de la concurrencia. Con Firebase, tienes garantizada una acción a la vez, por habitación.
Nota : Firebase adquirió Google y ya no tiene la opción de código abierto.
Compruébalo: http://www.cubeia.org/
fuente