2010-03-04 28 views
11

Tengo un año de experiencia escribiendo código de cliente pero ninguno con cosas de servidor. Quiero restringir un poco la cuestión para simplificar lo que intento lograr.Programación de servidores - Juego simple multijugador - ¿Qué protocolo y tecnologías?

Quiero escribir el código del servidor de modo que dos clientes (navegador o iPhone/Android) puedan conectarse, cuando dos jugadores se han conectado ven una cuenta de temporizador a cero. El reloj se sincronizaría en el servidor y los clientes serían identificables de manera única.

El problema aquí es con la palabra conectar, ¿qué usa la gente para los juegos multijugador? Abra un socket TCP para comunicaciones de dos vías? Puedes decir que no estoy seguro de lo que estoy hablando. Esperaba usar App Engine pero no estoy seguro si es adecuado ya que está basado en solicitudes.

Tengo cierta experiencia con Java y, aunque Erlang suena como la mejor opción, es algo con lo que solo quiero jugar y empujar rápido para que Java sea más fácil. Sólo necesito saber la mejor manera de conectar los jugadores etc.

Gracias,

Gav

Respuesta

7

Sugiero que consideramos de escritorio y sistemas móviles, como iguales clientes. ¿Qué opciones son entonces?

  • Escribe un servidor de socket que aceptará las conexiones de los clientes. Pero también necesita escribir algún cliente de socket, incluso 2x, para una computadora de escritorio y para un sistema operativo móvil. Y el usuario tendrá que instalar este cliente.

  • Inicia un servidor web (la tecnología que desee). Expondrá algunos servicios web que serán igualmente accesibles tanto para sistemas operativos de escritorio como para clientes. Pero aún necesita escribir una aplicación cliente (nuevamente 2x).

  • Ejecuta un servidor web y hace que todas las funciones sean accesibles a través del protocolo HTTP estándar. De esta forma, ni siquiera necesitará un cliente: casi todos los equipos de escritorio o móviles tienen al menos algún navegador web instalado. JavaScript proporcionará actualizaciones dinámicas de su ticker.

+0

Gracias por una buena respuesta a una pregunta vaga: la programación del socket es la más aplicable a lo que quiero lograr resulta que su respuesta me dio las palabras clave para investigar más. – gav

+0

Javascript en este caso podría y debe considerarse como un cliente como los demás. –

1

Estoy de ninguna manera un experto en comunicación de la red, pero si no te importa perder unos cuantos paquetes (o comprobación de errores en el software) y que desea rápido, la comunicación magra usted podría utilizar UDP. Creo que la mayoría de los programas de datos sensibles al tiempo y los medios de transmisión utilizan este protocolo para evitar retrasos y mantener el tamaño de los paquetes fuera de servicio.

1

Me di cuenta de una aplicación Cliente/Servidor hace unos años con java y ServerSocket (http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html). También tienes una versión SSL.

Así que crea un ServerSocket y espera la conexión. Cuando un cliente está conectado, crea un hilo que discutirá con este cliente con un protocolo que haya realizado.

http://www.developer.com/java/ent/article.php/1356891/A-PatternFramework-for-ClientServer-Programming-in-Java.htm

Si encuentra este pequeño marco:

http://www.bablokb.de/jcs/jcs.html

Uno de lo más difícil es crear su protocolo, una buena manera de aprender cómo crear una sería de entender cómo el trabajo el FTP (o HTTP ...).

1

Tiene razón en que el modelo J2EE se descompone con demandas casi en tiempo real o multijugador. Puede que quiera considerar el proyecto del servidor de juego RedDwarf. Hace para los juegos lo que los Servlets hacen por la lógica de busienss y es de código abierto.

http://www.reddwarfserver.org

que sugieren que consideramos de escritorio y sistemas móviles como iguales clientes. ¿Qué opciones son ?

RedDwarf tiene una capa de trabsport enchufable y puede admitir cualquier tipo de cliente que desee.

Los servidores web son ideales para aplicaciones de tipo web. si su juego actúa como una página web, no es multiusuario, se basa en turnos y evoluciona muy lentamente, entonces un servidor web es una buena elección.

Sin embargo, no necesita algo un poco más robusto en tecnología.

Ah, y por lo que vale la pena, whetevr que haga, si desea escribir un servidor desde cero, NO use "ServerSocket". Eso requiere un hilo por conexión y nunca se escalará. Use NIO o use un frameWoprk de NIO como Netty.

+0

El enlace está muerto, aquí está el enlace de github: https://github.com/reddwarf-nextgen/reddwarf –

Cuestiones relacionadas