2010-07-01 27 views
6

Aprendiendo tecnologías de servidor de Java, tratando de aclarar algunas cosas. Existen pocas tecnologías que permiten que las aplicaciones Java se comuniquen entre sí.¿Cómo puede el servidor enviar datos al cliente?

1) Servicios Web (REST/SOAP) a través de HTTP

2) simple post/GET usando URLConnection a través de HTTP.

3) sockets

4) RMI = sockets + serialización de objetos + Algunas Utilidades

5) Los diferentes servidores de medios como red5 = RTMP o RTMPT

Todas estas tecnologías suponen que hay un servidor aplicación y aplicación del cliente. La aplicación del cliente conoce la dirección del servidor y debe ser el iniciador de la llamada. Y por lo que tengo entendido, el servidor no puede enviar datos al cliente, solo puede enviar datos de vuelta como respuesta al cliente. Y es posible, si solo cambian sus roles, en este caso el servidor debería conocer la IP del cliente.

Así que me pregunto cómo funcionan los juegos en red? ¿Es posible abrir la conexión y el intercambio de datos entre el servidor y el cliente para todo el tiempo sin necesidad de jalar la solicitud del cliente cada 1-2 segundos y el servidor no conocería la IP del cliente. No estoy hablando de Comet y otros hacks.

Gracias

Respuesta

6

mayoría de dos vías, aplicaciones persistentes abrir un puerto de red y mantenerla abierta. El servidor escucha en un puerto conocido, y cuando un cliente se conecta a ese puerto, obtiene una conexión TCP persistente al servidor. Una conexión como esa es básicamente una "tubería" bidireccional, los datos pueden fluir en serie en ambas direcciones simultáneamente. Mientras ese conducto esté abierto, el servidor escuchará los mensajes del cliente y el cliente escuchará los mensajes del servidor.

de la API I común de E/S utilizado para tuberías TCP permiten cualquier extremo de la conexión que se "despertada": Un asíncrono I/petición O ejecuta una función de devolución de llamada registrada a partir de un subproceso administrado por el sistema operativo o biblioteca I/O o el cliente/servidor ata su propio hilo en una llamada de "bloqueo", que regresa cuando los datos están disponibles. No son necesarios intentos de sondeo o reconexión con este modelo, el cliente y el servidor "saben" cuando los datos están disponibles y pueden actuar de inmediato.

+2

También los juegos en red en tiempo real a menudo "engañan" un poco. Cada cliente actualiza el mundo localmente en tiempo real, y hace algún truco para resincronizar la simulación compartida cuando llega una nueva actualización del servidor. Cuando le disparas a tu enemigo, puede esquivar tu disparo recibiendo solo un pequeño daño o puede no serlo. Por supuesto, es el servidor el que decidirá con justicia dependiendo de si el comando de esquivar de ese cliente llegó antes o después del tiro ... pero el jugador atacante probablemente no notará una eventual incongruencia entre la animación en 3D que se muestra y el número de energía barras restadas – 6502

Cuestiones relacionadas