design-patterns - software - patrones estructurales
Patrones de diseño de comunicación de red (7)
Diría que la cadena de patrones de responsabilidad podría ser útil para enviar / recibir datos de / a la red.
Usted 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 el envío de datos, la cadena podría verse así
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 consultar este artículo para obtener más información sobre la cadena de responsabilidad. http://www.vincehuston.org/dp/chain.html
Me he dado cuenta de que varias preguntas que hice en el pasado, como this realmente se reducen a una pregunta más fundamental.
¿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.
EDITAR:
Por favor, no sugiera varios detalles de implementación o discuta protocolos específicos a menos que estén atados 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 cuesta creer que nadie haya ideado ningún patrón común para la comunicación en red. Sí, sé que "depende", pero puede decir eso sobre cualquier proyecto, sin embargo, hay muchos patrones que cubren ideas generales.
Esta es una pregunta bastante amplia y su tratamiento probablemente requiera un libro bastante denso.
No conozco ningún recurso de este tipo, pero pensemos en esto y consideremos cuáles serían las dimensiones de un espacio de patrón de comunicación de red:
modalidad de conexión: {conexión-basada, sin conexión}
modalidad de interacción: {síncrono, asíncrono}
complejidad de la conversación: {comando-respuesta, diálogo}
forma de mensaje: {freeform-stream, bloque semiestructurado, bloque completamente estructurado} ...?
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 patrón de características de protocolo anterior. espacio. El código fuente de su sistema favorito * nix os sería un buen lugar para buscar.
Las implementaciones del analizador probablemente se agruparían en dos grandes categorías: {procesamiento por conmutación de comandos, máquina de estados finitos}.
El primero es (obviamente) el más simple de los dos y probablemente 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 a un protocolo (si todavía está sujeto a cambios de diseño).
(Las instalaciones de red del sistema operativo subyacente (virtual) (por supuesto) también influyen mucho en la implementación. Tome JVM, por ejemplo: el procesamiento de canal basado en la selección de NIO funcionaría muy bien con un FSM).
Espero que ayude.
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.
Los protocolos VoIP son buenos para aplicaciones de transmisión: RTP y H.323
Los protocolos de enrutamiento de red también son buenos: BGP (y extensiones), LDP, VRRP / CARP.
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? En tercer lugar, ¿quieres algún aspecto de seguridad en tu protocolo?
No es que responder "desee usar ASN.1" forzará la respuesta a bastantes de las preguntas de diseño del protocolo.
Patrón de aceptador / conector: http://www.cs.wustl.edu/~schmidt/PDF/Acceptor.pdf
La cadena de filtros se basa en la cadena de responsabilidad de Gof. Se usa en una gran cantidad de redes / estructuras.
Máquinas de estado para codificar / decodificar PDU.
Recomiendo: abstraer los protocolos de red / s.
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.