2011-01-19 12 views
7

¿Cuál es la API Java "oficial" para comunicación cliente/servidor o P2P? Java RMI? ¿Alguna otra API de redes?Estándar Java para comunicación cliente/servidor

¿Es esto conexión de red oficial API el estándar para ambos SE y EE?

estoy seguro de que la respuesta es muy específicos al contexto, por lo que vamos a echar un vistazo a algunos ejemplos:

  1. usted tiene 2 clientes batientes instaladas en 2 máquinas y conectados a la misma red (o el Internet), y desea que cualquiera de ellos envíe al otro una primitiva, como el entero 4, o algún POJO, como un objeto "Widget"
  2. Igual que el n. ° 1 anterior, pero entre un cliente Swing y un back-end compatible con Java EE (implementando beans administrados, servidores de aplicaciones, las nueve yardas completas)

No tengo una aplicación específica en mente, solo me pregunto cuáles son las "normas" para la comunicación cliente-cliente y cliente-servidor en el mundo de Java.

Respuesta

3

Si estar obligado por Java no es un problema, RMI es una solución bastante abstracta cuando se trata de "intercambiar" datos de la solución de cliente y servidor (especialmente cuando los datos son clases Java que pueden ser difíciles/demasiado esfuerzo para representar como datos textuales). Solo asegúrate de que tu objeto implemente Serializable y casi cualquier cosa puede transmitirse a través del cable.

Si esto no se ajusta a su factura y desea desplegar los elementos de red en bruto, el marco de socket cliente-servidor Netty es una muy buena opción.

+0

¿Con qué protocolos viajan los objetos Netty y los objetos RMI serializados? ¿La pila TCP? UDP? ¿Algo más? ¿Y cómo se encripta su contenido? SSL? AES? Algo más fuerte? – Zac

1

No existe la API de red más oficial en J2SE, todas las API J2SE son oficiales en el sentido de que son compatibles con Sun (ahora Oracle).
Dicho esto, usted debe elegir su API se basa en los criterios siguientes:

  • ¿Es usted (o su equipo) sabe cómo utilizar la API en particular;
  • Cuán simple/compleja es esta API para usar;
  • ¿Qué rendimiento está buscando? Para las aplicaciones sensibles al rendimiento, puede verse obligado a usar un protocolo binario. Para el resto de los casos, puede usar el protocolo basado en texto.

Por ejemplo, entre dos clientes, el protocolo basado en texto simple será suficiente para pasar POJO, por ejemplo, utilizando memorias intermedias de protocolo MINA o Google.
Esto funcionará también entre el cliente y el servidor.


respuesta a las preguntas de Zac en comentario:

  1. protocolos binarios ganancia de rendimiento viene del hecho de que no es necesario para convertir todo a la forma de texto y de vuelta - sólo puede pasar binaria presentación de su memoria de aplicación con cambios mínimos, como, en el caso de BSD Sockets API, la conversión de orden de bytes del servidor a orden de bytes de la red.Desafortunadamente, no conozco detalles sobre cómo los procesos de serialización de RMI/Java se oponen, pero estoy seguro de que es mucho más rápido que pasar todos los datos en forma legible;
  2. Sí, los buffers de protocolo y MINA tienen API de Java. Simplemente no forman parte del paquete Java SE, tienes que descargarlos por separado. Por cierto, MINA puede usar serialización binaria y legible, dependiendo de cómo la use.
  3. Debería definir la noción de "bueno" de alguna manera, por ejemplo, respondiendo a las preguntas que mencioné anteriormente. Si desea usar objetos a través de la red, use RMI. Si no lo hace, Netty o MINA serán suficientes, lo que sea más fácil de dominar.
+1

Por favor: J2SE ya no existe, se ha llamado Java SE por más de 5 años. Referencia: http://www.java.net/blog/kgh/archive/2005/06/goodbye_j2se_he_1.html –

+0

¡Gracias! Varias preguntas de seguimiento: (1) En protocolos binarios, cómo se compilan/serializan los POJO y primitivos/etc. hacia abajo en binario que los hace mucho más rápido que las alternativas basadas en texto? (2) Protocolos de MINA y Google: tienen API de Java, ¿sí? Y (3) ¿Cuáles son algunos buenos protocolos binarios? RMI? Netty? ¿Otros? – Zac

+0

@Sean gracias por la corrección! –

0

Para P2P, Sun en un momento empujó JXTA bastante duro.

No me atrevería a utilizar RMI para la comunicación P2P.

-1

J2SE la más común es probablemente RMI o sockets sin formato.

J2EE usa un bus de mensajes que todos (servidores y clientes) suscriben y que es bastante diferente de las soluciones de estilo rmi (aunque en el nivel más bajo una implementación aún puede confiar en RMI). Ayuda a automatizar la redundancia y la conmutación por error. Si necesita esta funcionalidad, creo que también se puede usar en SE.

No he usado J2EE desde hace bastante tiempo, así que esto puede haber cambiado, pero lo dudo. El sistema de mensajería era un componente central de J2EE.

+0

jse ciertamente usa rmi. sin embargo, no estoy seguro de dónde sacó la idea sobre el bus de mensajería en j2ee. mensajes posibles en j2ee, pero la norma son las llamadas a métodos remotos normales que generalmente se implementan en rmi. – jtahlborn

+0

@jtahlborn No he usado J2EE durante años, pero era fundamental para el sistema (JMS). Ciertamente sigue figurando como una parte central de J2EE (http://download.oracle.com/javaee/6/tutorial/doc/bncdr.html) y no sé cómo implementarías ningún sistema real sin él . ¿Cómo implementa la conmutación por error automática del servidor utilizando llamadas RMI? Sería un dolor en el trasero. ¿Estás seguro de que no solo estás usando algunas partes de J2EE para implementar un solo servidor web o algo así? –

0

rmi es prácticamente el protocolo estándar de java a java. está integrado y es muy fácil de usar. la mayoría de los backends j2ee también se comunican usando rmi, aunque esa no es la única posibilidad.

Cuestiones relacionadas