Frage

Ich bin gekommen, zu erkennen, dass einige Fragen, die ich in der Vergangenheit gefragt, wie diese wirklich einkochen auf eine grundsätzlichere Frage.

Gibt es irgendwelche bekannten Design-Muster für Netzwerk-Kommunikation und auf Grund es ist Natur, Protokoll Bau / Parsing? Eine Google-Suche hat sich nicht viel enthüllt.

Beachten Sie, dass ich bin nicht für Lösungen für ein gegebenes Problem suchen, ich suche nach dokumentierten Entwurfsmuster Umgang mit Netzwerk-Kommunikation und deren Protokolle.

EDIT:

Bitte, lassen nicht darauf schließen verschiedene Implementierungsdetails oder spezielle Protokolle diskutieren, wenn es zu einem Designmuster gebunden ist. Protokoll-Design ist nicht das Problem, es das Design-Muster für die Erstellung oder Parsen Protokolle ist, die ich suche, nicht den Kommunikationsmuster selbst zu erwähnen.

EDIT2:

Ich finde es schwer zu glauben, dass niemand mit irgendwelchen gemeinsamen Mustern für die Netzwerkkommunikation gekommen ist. Ja, ich weiß „es kommt“, aber man kann sagen, dass über jedes Projekt, aber es gibt viele Muster sind, die allgemeinen Ideen decken.

War es hilfreich?

Lösung

Ich würde sagen, dass die Kette von responsability Mustern nützlich sein könnte zum Senden / Empfangen von Daten von / an das Netzwerk.

Sie bauen eine Reihe von Befehlen an den Server vom Client zu senden. Jeder Befehl wird durch die Kette von responsability verarbeitet, wobei die Daten den Befehl richtig zu handhaben hinzugefügt.

Auf Daten zu senden, die Kette so aussehen könnte

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

Auf Daten zu erhalten, könnte die Kette ähnlich sein, aber andersrum

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

Sie können diesen Artikel überprüfen, um weitere Informationen über die Kette der Verantwortung. http://www.vincehuston.org/dp/chain.html

Andere Tipps

Dies ist eine ziemlich breite Frage und ihre Behandlung erfordert wahrscheinlich ein ziemlich dichtes Buch.

Ich weiß nicht, von einer solchen Ressource selbst, aber dies lässt durchdenken und überlegen, was die Abmessungen eines Netzwerk-Kommunikationsmusterraum wäre:

Verbindung Modalität: {verbindungsbasierten, verbindungslose}

Interaktion Modalität: {synchron, asynchron}

Gespräch Komplexität: {Befehl-Antwort, Dialog}

Nachrichten Form: {Freiform-stream, semi-strukturierter Block vollständig strukturierter Block} ..?

Ein guter Anfang ist das TCP / IP-Protokollfamilie zu nehmen, um sie zu dem obigen Raum abzubilden, und werfen Sie einen Blick auf die Umsetzung (n) eines oder mehrerer Proben, die eine einzigartige Position in dem obigen Protokoll besetzen -Eigenschaften Musterraum. Quellcode Ihres Liebling * nichts os wäre ein guter Ort zu suchen.

Parser-Implementierungen würden wahrscheinlich in zwei große Kategorien fallen: {command vermitteltes Verarbeitung, Finite-State-Maschine}.

Das erstere ist (natürlich) die einfachere der beiden und wahrscheinlich die erste Implementierung (es sei denn, Sie diese Art der Sache vorher getan haben).

Letzteres ist (wahrscheinlich) mehr robust, effizient (in Bezug auf loc) und erlauben würde, für Änderungen an ein Protokoll zur Annahme (wenn es noch unter dem Vorbehalt Wechsel zu entwerfen).

(Die zu Grunde liegende (virtuellen) OS-Networking-Einrichtungen (natürlich) auch stark die Implementierung beeinflussen Nehmen JVM, zum Beispiel:.. NIO Auswahl basierte Kanalverarbeitung würde mit einer FSM ganz gut funktionieren)

Ich hoffe, das hilft.

Ich empfehle:. Abstrakt das Netzwerkprotokoll / s entfernt

Zuerst entscheiden, was die Funktionalität sind, die Module und die APIs zwischen ihnen. Dann entscheiden, welches Protokoll die Daten über das Netzwerk reiten gehen.

Dann sorgfältig kapseln alle Netzwerkprobleme in ihrer eigenen Ebene, so dass Sie später Verschlüsselung anwenden können, Kompression, fügen Sie den HTTP-Transport (passieren Firewalls) oder was auch immer Sie wollen später in einer Art und Weise orthogonal zur Funktionalität hinzuzufügen.

Acceptor / Stecker Muster: http: //www.cs.wustl. edu / ~ schmidt / PDF / Acceptor.pdf

Kette von Filtern basieren auf Gof Chain Of responsabiliy, ist es in vielen Netzwerk-Stack / Framework verwendet.

Zustandsmaschinen für die Codierung / Decodierung PDUs.

Ich weiß nicht, über Design Patterns, sondern bestehende Protokoll Erforschung ist wahrscheinlich ein guter Ausgangspunkt, vor allem „modern“ diejenigen, die standardisiert wurden.

BitTorrent ist ein sehr beliebtes dezentralisierte Protokoll, das eine Reihe von Erweiterungen hat.

OpenSSH ist ein weiterer guter Kandidat; es unterstützt Feature Negotiation, mehrere Verschlüsselungstypen und de / Muxing Kanäle.

VoIP-Protokolle sind gut für Streaming-Anwendungen: RTP und H.323

Netzwerk-Routing-Protokolle sind auch gut. BGP (und Erweiterungen), LDP, VRRP / CARP

Ich weiß nicht, über Muster, als solche, aber es gibt ein paar „offensichtlich“ Auswahlpunkte. Erstens wollen Sie ASN.1 verwenden oder nicht (dies beeinflusst eine ganze Menge)? Zweitens haben Sie eine menschenlesbare Protokoll oder eine binäre Eins wollen? Drittens haben Sie irgendwelche Sicherheitsaspekte in Ihrem Protokoll wollen?

Nicht, dass die Beantwortung „wollen ASN.1 verwenden“ wird teh Antwort auf ganz wenige der Protokolldesign Fragen erzwingen.

Haben Sie nicht gründlich durchgemacht, aber ich denke, diese ist gut doc:

Auch diese sieht aus wie ein gutes Buch:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top