2011-06-30 13 views
6

Sugiera la biblioteca java, que implementa udp confiable. Se usará para que un servidor de juegos se comunique con los clientes y otros servidores.

PD ¿Tal vez puede sugerir una tecnología que sea más productiva para trabajar con esa tarea (servidor del juego)? Pero esto debe funcionar en Linux.Java confiable UDP

Edit: Es un juego de tipo de acción, por lo que necesita hablar con el servidor lo más rápido posible.

Edición 2: he encontrado Enet que fue utilizado para un juego FPS, pero es C++, ¿habrá una sobrecarga si lo llamo muchas veces por segundo?

+0

Primero defina "UDP confiable". –

+0

¿La sobrecarga de TCP es demasiado mala para su aplicación? – amit

+2

@krio afaik TCP está construido sobre IP no UDP. UDP, sin embargo, también se construye encima de IP –

Respuesta

2

Es posible que no necesite mensajería confiable para todos los tipos de mensajes. Por ejemplo, si envía repetidamente el estado de cosas como jugadores, y algunos paquetes se pierden, puede que ni siquiera importe.


Existen bibliotecas basadas en UDP de alto rendimiento que admiten Java. Uno de estos es el LBM de 29West. No es más barato porque es muy difícil hacerlo bien. Incluso con un producto profesional puede necesitar una red dedicada para UDP para minimizar la pérdida.

Para fines de un juego, le sugiero que utilice un servicio JMS como ActiveMQ que se ejecuta donde quiera que pueda ejecutar Java. Debería poder enviar mensajes de 10K por segundo con una latencia de unos pocos milisegundos.


Cuando la gente dice que algo debe ser lo más rápido posible, esto puede significar casi cualquier cosa. Para algunas personas, esto significa 10 ms, 1 ms, 100 us, 10 us, 1 us es aceptable. Algunos enrutadores de red admiten pasar paquetes con una latencia de 600 ns. Cuanto menor es la latencia, mayor es el costo y mayor es el impacto en el diseño. Asumir que necesita más velocidad de la que necesita puede afectar el diseño y el costo innecesariamente.

Tienes que ser realista ya que tienes una interfaz humana. Un humano no puede responder más rápido que aproximadamente 1/20 de segundo o aproximadamente 50 ms. Si mantienes el mensaje a menos de 5 ms, un ser humano no podrá notar la diferencia.

+0

¿La latencia de unos segundos es aceptable para un juego de acción? –

+0

No, en absoluto. Quería decir algunos milisegundos. Puede lograr una latencia inferior a milisegundos, pero eso requiere más esfuerzo y depende de sus redes. La latencia más baja que uso un intermediario que he visto es de menos de 10 microsegundos, pero tiene un costo. ;) –

+0

Gracias por su sugerencia, lo intentaré por la noche. ¿Puedes dar algún enlace a tutoriales para usarlo? – Viktor

-2

UDP no es, por definición, un servicio confiable. No garantiza una alta calidad de servicio. Sin embargo, puede usar TCP.

+1

Supongo que pregunta si hay bibliotecas que implementen un protocolo confiable sobre UDP. – jontro

+3

TCP tiene control de congestión, lo que podría hacerlo inutilizable para algunas aplicaciones. – amit

+1

puede agregar confiabilidad a la red basada en udp al permitir que el receptor envíe una confirmación al remitente original. Creo que eso es lo que está buscando. – Will

3

Hay una aplicación java de RUDP protocolo (fiable UDP) (RFC908, RFC1151)

http://sourceforge.net/projects/rudp/?source=dlp

+0

No use ActiveMQ. Ejecuto una prueba de rendimiento de múltiples buses de mensajes JMS, incluidos JBoss, MQSeries, Weblogic, SunMQ y ActiveMQ, y puedo decirles que ActiveMQ fue el peor por lejos, es decir, mensajes perdidos y todo tipo de comportamientos y errores inexplicables. Probé con la versión 5.0. – jrobertsz66

4

Estas son las bibliotecas/marcos que conozco que implementar algo así como UDP confiable:

  • Mobile Reliable UDP (MR-UDP)

    MR-UDP tiene como objetivo proporcionar una comunicación confiable basada en UDP desde/hacia nodos móviles (MN), con la menor sobrecarga posible. Extiende un protocolo Reliable UDP (R-UDP) con características de tolerancia a la movilidad, como la capacidad de manejar conectividad intermitente, cortafuegos/cortafuegos NAT y robustez para la conmutación de direcciones IP o interfaces de red (por ejemplo, de móvil a WiFi, y viceversa).

  • UDT-Java
    implementación en Java de UDP-based Data Transfer (UDT)

    UDT es un protocolo fiable basada en UDP nivel de aplicación para el transporte de datos de datos distribuidas intensivos aplicaciones a través de redes de alta velocidad de área amplia. UDT usa UDP para transferir datos masivos con su propio control de confiabilidad y mecanismos de control de congestión. El nuevo protocolo puede transferir datos a una velocidad mucho mayor que TCP. UDT es también un marco altamente configurable que puede acomodar varios algoritmos de control de congestión.

  • JNetRobust

    rápida, no intrusiva protocolo de red virtual fiable & orientado a mensajes para la JVM 1.6+.
    Reside entre el transporte y la capa de aplicación.
    Características:

    • fiabilidad de los datos transmitidos
    • recibidos, los datos no validada está disponible inmediatamente
    • el paquete es más grande que el paquete de UDP, pero más pequeño que el paquete de TCP
    • sin control de flujo
    • sin control de congestión

Descargo de responsabilidad: Soy el autor de JNetRobust, es nuevo y está todavía en alfa.