Ich habe eine Reihe von Netzwerksystemen geschrieben und habe eine gute Vorstellung davon, wie Netzwerke funktionieren. Am Ende habe ich jedoch immer eine Funktion zum Empfangen von Paketen, die eine riesige Switch-Anweisung ist. Das fängt an, mich zu nerven. Ich hätte viel lieber eine schöne, elegante, objektorientierte Lösung für den Empfang von Paketen, aber jedes Mal, wenn ich versuche, eine gute Lösung zu finden, komme ich nicht weiter.
Nehmen wir zum Beispiel an, Sie haben einen Netzwerkserver. Er wartet dort einfach auf Antworten. Ein Paket kommt herein und der Server muss das Paket validieren und dann entscheiden, wie es zu behandeln ist.
Im Moment mache ich das, indem ich die Paket-ID im Header einschalte und dann einen riesigen Haufen von Funktionsaufrufen habe, die jeden Pakettyp behandeln. Bei komplizierten Netzwerksystemen führt dies zu einer monolithischen Switch-Anweisung, und ich mag es wirklich nicht, auf diese Weise zu arbeiten. Eine Möglichkeit, die ich in Betracht gezogen habe, ist die Verwendung einer Map von Handler-Klassen. Ich kann dann das Paket an die entsprechende Klasse übergeben und die eingehenden Daten verarbeiten. Das Problem, das ich damit habe, ist, dass ich eine Möglichkeit brauche, jeden Paket-Handler mit der Map zu "registrieren". Das bedeutet im Allgemeinen, dass ich eine statische Kopie der Klasse erstellen muss und diese dann im Konstruktor mit dem zentralen Packet-Handler registrieren muss. Während dies funktioniert, scheint es wirklich wie eine unelegante und fiddly Weise der Handhabung.
Editar : Es wäre ideal, ein System zu haben, das in beide Richtungen funktioniert, d.h. eine Klassenstruktur, die das Senden und Empfangen der gleichen Pakettypen leicht handhabt (natürlich mit unterschiedlichen Funktionen).
Kann mir jemand einen besseren Weg zur Behandlung eingehender Pakete zeigen? Links und nützliche Informationen sind sehr willkommen!
Ich bitte um Entschuldigung, wenn ich mein Problem nicht gut beschrieben habe, denn meine Unfähigkeit, es gut zu beschreiben, ist auch der Grund dafür, dass es mir nie gelungen ist, eine Lösung zu finden.