2009-01-05 31 views
10

Actualmente estoy buscando una biblioteca de redes Java. Lo que quiero hacer es enviar XML, JSON u otros mensajes serializados desde un cliente a otro cliente y/o cliente a servidor.¿Hay una buena biblioteca de redes Java?

Mi primer intento fue crear un POJO para cada mensaje, más un MessageWriter para enviar y un MessageReader para recibirlo. Además de socket y manejo de errores. Lo cual es bastante trabajo propenso a errores.

Lo que estoy buscando es una biblioteca de nivel superior que abstraiga de los sockets. Además, debería ser compatible con algo así como la generación de código para los mensajes.

Los búferes de protocolo de Google (http://code.google.com/apis/protocolbuffers/) parecen prometedores. Pero hay alternativas? El énfasis no está en la velocidad o la seguridad (por el momento), se supone que debe funcionar de manera confiable y con un tiempo de implementación bajo.

Respuesta

4

Ah ... gotcha. Pero en lugar de usar código gen. para gestionar y deshacer, si tiene Java en ambos extremos, ¿podría utilizar la serialización de objetos simples? Si el rendimiento y/o el tamaño del mensaje es una preocupación, puede hacer que su clase de mensaje sea externalizable.

No había visto Protobuf antes. Se ve bastante decente. Usando eso, entonces solo necesitarías un método de transmisión.

+1

JGroups parece bastante prometedor para la transferencia de mensajes. –

2

Si aún no está utilizando Spring, esto podría ser mucho más de lo que está buscando. Pero HttpInvoker es una abstracción de alto nivel para enviar mensajes. Todo el remoting information está disponible en línea, y la sección HTTP Invoker se encuentra en 17.4.

13

Tiene varias opciones según lo abstraído de los sockets sin procesar que desea obtener. Una vez que se sale de la programación a nivel de socket, que está bastante en interacción remota territorio,

  • Opciones de Conexión remota estándar para Java: RMI o JMS
  • interacción remota Implementar JMX Mbeans en cada cliente y los servidores y utilizar JMX invocar operaciones de paso de mensajes.
  • Si cree que es posible que desee utilizar la multidifusión, definitivamente comprobaría JGroups.
  • Si está buscando crear su propio protocolo pero quiere usar algunos componentes básicos existentes, consulte Jakarta Commons Net. El HttpClient al que se hace referencia en la Respuesta n. ° 1 se ha incorporado a este paquete.
  • También hay algunos sistemas de mensajería propietarios interesantes que tienen la virtud adicional de admitir múltiples plataformas/idiomas como Spread y DBus.
  • No se pueden enumerar las opciones de acceso remoto sin mencionar WebServices .... pero .... blech!

no estoy completamente seguro de lo que entendemos por generación de código para los mensajes. Puedes elaborar ?

+0

Necesito un objeto para representar el mensaje real. (clase Message {getId(); getSender(); ...}) Pero necesita tener un lector para alimentar sus datos en este objeto desde una secuencia y a una secuencia. Me gustaría simplificar este proceso. Protobuf puede generar un lector/escritor a partir de un archivo de descripción de mensaje. –

0

Si le gustan las capacidades, también puede consultar JBossCache.Se implementa utilizando JGroups y aunque su requisito no es una solución de almacenamiento en caché, abstrae bastante bien algunas de las funciones principales de JGroups implementando básicamente un mapa hash distribuido con notificaciones de eventos, etc.

+0

Acabo de jugar un poco con la serialización de JGroups y Java. Parece que esto es lo que estaba buscando. Gracias. –

0

IDL (variantes de la descripción de la interfaz) idiomas) basado en el idioma neutral (tipo de) red biblioteca/marco:

  • Thrift - Apache license.
  • Ice - Licencias GPL y comerciales.
  • CORBA - Si desea más opciones.
0

Le sugiero que mire ActiveMQ para ver los mensajes que pasan. Es simple, flexible y rápido. Admite objetos Serializables, pero también mensajes de Mapa y otros tipos de mensajes JMS, por lo que no debería necesitar su propio formato de Serialización a menos que la eficiencia sea importante. Si el rendimiento es importante, sugeriría Hessian, es muy rápido sin requerir la generación de código.

Cuestiones relacionadas