2009-03-22 19 views
27

Me he dado cuenta de que varias preguntas que hice en el pasado, como this, realmente se reducen a una pregunta más fundamental.Patrones de diseño de comunicación de red

¿Existen patrones de diseño bien conocidos para las comunicaciones de red y, en virtud de su naturaleza, construcción/análisis de protocolos? Una búsqueda en google no ha revelado mucho.

Tenga en cuenta que no estoy buscando soluciones para ningún problema dado, estoy buscando patrones de diseño documentados que se ocupen de las comunicaciones de red y sus protocolos.

EDIT:

Por favor, no sugieren diversos detalles de implementación o hablar de protocolos específicos a menos que esté ligada a un patrón de diseño. El diseño del protocolo no es el problema, son los patrones de diseño para crear o analizar los protocolos que estoy buscando, sin mencionar los patrones de comunicación en sí mismos.

Edit2:

Me resulta difícil creer que nadie ha llegado con algunos patrones comunes para la comunicación de red. Sí, sé que "depende", pero puede decir eso sobre cualquier proyecto, sin embargo, hay muchos patrones que cubren ideas generales.

+2

Hola, estaba tratando de hacer una pregunta similar, y encontré su pregunta. He desarrollado numerosas aplicaciones donde hay hilo de escucha y cliente en cada nodo. Como dijiste, diferentes aplicaciones pueden tener diferentes necesidades. Algunos pueden requerir ACK, algunos pueden depender de mensajes duplicados, etc. Mientras desarrollas, la mayoría de las veces miro hacia atrás en mi código anterior o sigo con lo que parece ser la forma más lógica de hacer algo. Sería realmente útil, si hubiera algún patrón, hablar sobre la comunicación de la capa de aplicación. ¿O debería uno simplemente mirar los protocolos existentes para encontrar soluciones? – Kalp

+0

Consulte también los patrones de Proactor/Reactor. Aquí hay un artículo por ejemplo: [http://www.artima.com/articles/io_design_patterns.html](http://www.artima.com/articles/io_design_patterns.html) – alariq

+0

@casperOne - ¿Cuál es el propósito de cerrando una pregunta de 3 años que ya está respondida? –

Respuesta

8

Yo diría que la cadena de patrones de responsabilidad podría ser útil para enviar/recibir datos desde/hacia la red.

Crea una serie de comandos para enviar al servidor desde el cliente. Cada comando se procesa a través de la cadena de responsabilidad, con datos agregados para manejar el comando correctamente.

En datos de envío, la cadena podría parecer que

 

Command --> Wrap some  --> Encrypt --> Send data 
to send  data around 
       the command 
       (source, extra 
       information if 
       needed) 

En la recepción de datos, la cadena podría ser similar, pero al revés

 
Receive Data --> Decrypt --> Unwrap extra data --> Execute command 

Puede comprobar este artículo para más información sobre la cadena de responsabilidad. http://www.vincehuston.org/dp/chain.html

-1

No sé sobre patrones, como tal, pero hay algunos puntos de selección "obvios". Primero, ¿quieres usar ASN.1 o no (esto influye en un lote ENTERO)? Segundo, ¿quieres un protocolo legible por humanos o uno binario? Tercero, ¿quieres algún aspecto de seguridad en tu protocolo?

No es que contestar "desee usar ASN.1" forzará la respuesta a bastantes de las preguntas de diseño del protocolo.

2

Recomiendo: abstraer los protocolos de red.

Primero decida cuáles son la funcionalidad, los módulos y las API entre ellos. Luego, decida qué protocolo transportarán los datos a través de la red.

Luego, encapsule cuidadosamente todos los problemas de red en su propia capa para luego poder aplicar cifrado, compresión, agregar transporte HTTP (para pasar firewalls) o lo que quiera agregar más adelante de una manera ortogonal a la funcionalidad.

0

No conozco los patrones de diseño, pero investigar los protocolos existentes es probablemente un buen punto de partida, especialmente los "modernos" que se han estandarizado.

BitTorrent es un protocolo descentralizado muy popular que tiene una serie de extensiones.

OpenSSH es otro buen candidato; admite la negociación de características, los tipos de encriptación múltiple y los canales de exclusión/multiplexación.

protocolos VoIP son buenas para aplicaciones de transmisión:

protocolos de enrutamiento RTP y H.323

red son buenos también: BGP (y extensiones), PLD, VRRP/CARP.

11

Esta es una pregunta bastante amplia y su tratamiento probablemente requiera un libro bastante denso.

No sé de cualquier tales recursos a mí mismo, pero permite pensar en esto y considerar cuáles serían las dimensiones de un espacio de patrones de comunicación de red:

modalidad de conexión: {basado en la conexión, conexión de menos}

modalidad

interacción: {síncrono, asíncrono}

conversación complejidad: {-respuesta del sistema, de diálogo}

forma

mensaje: {freeform-stream, bloque semi-estructurada, totalmente estructurados bloque} ..?

Un buen lugar para comenzar es tomar la familia de protocolos TCP/IP, asignarlos al espacio anterior y observar la implementación (es) de uno o más especímenes que ocupan una posición única en el anterior protocolo-características patrón de espacio. El código fuente de su sistema favorito * nix os sería un buen lugar para buscar.

Las implementaciones del analizador probablemente se clasificarían en dos categorías amplias: {proceso de conmutación de comandos, máquina de estados finitos}.

El primero es (obviamente) el más simple de los dos y es probable que la implementación inicial (a menos que haya hecho este tipo de cosas antes).

Este último es (probablemente) más robusto, eficiente (en términos de loc), y permitiría adoptar cambios en un protocolo (si todavía está sujeto a cambios de diseño).

(el subyacente (virtual) de instalaciones de redes OS (por supuesto) también influyen en gran medida la aplicación Tome JVM, por ejemplo:.. La selección NIO procesamiento de canal basada funcionaría muy bien con una FSM)

Esperamos que ayuda .

-1

no han pasado por esto a fondo, pero supongo que es bueno this doc:

Además, this parece un buen libro:

2

patrón aceptador/conector: http://www.cs.wustl.edu/~schmidt/PDF/Acceptor.pdf

Cadena de filtros basados ​​en la cadena de responsabilidad de Gof, se usa en una gran cantidad de redes/estructuras.

Máquinas de estado para codificar/decodificar PDU.