Frage

Angenommen, Sie eine Anwendung schreiben, die das HTTP-Protokoll implementieren müssen. Protokolle sind sehr komplex und lassen können mehr Befehle auf der Stufe einer Transaktion abhängig sind sie in.

Als Beispiel bei SMTP aussehen. Ein SMTP-Server muss einen Fehler aus, wenn die „Daten“ -Befehl vor „rcpt“ und „Mail“ gesendet wird, zu empfangen.

Meine Frage ist: Was ist der beste Weg Protokolle wie dies in Code zu behandeln? Gibt es irgendwelche Design-Muster im Zusammenhang mit dieser?

Edit: Diese Frage bezieht sich auf die Theorie hinter Führungsprotokolle. Ich bin mir bewusst, dass eine Bibliothek ist der beste Ansatz in der Praxis.

War es hilfreich?

Lösung

State Machines

In meinen Augen eine Zustandsmaschine ist der einfachste Weg, Protokolle zu modellieren und zu handhaben. Ein Zustand, würde durch mehrere Übergänge erreicht werden in Bezug auf gültige Befehle empfangen. Jeder Staat würde dann erlauben nur eine bestimmte Untergruppe von Befehlen.

Zustandsmaschinen sind in Compilerbau für lexikalische Analyse eines Programms verwendet. Ich sehe das Problem der Protokollimplementierung als Sonderfall davon.

Andere Tipps

Die besten Möglichkeiten, Protokolle wie das zu handhaben sind, eine Bibliothek zu verwenden. Fast jede Computersprache auf der Erde verwendet wird, hat bereits existierende, gut getesteten Bibliotheken behandeln HTTP und SMTP.

@fluffels @

Zed Shaw (Autor von Mongrel) stimmt Sie ; er nutzt Ragel .

ich mit a28 einverstanden ist, ist der beste Weg, um entweder:

  • Verwenden Sie eine Bibliothek, die den Protokollserver
  • implementiert
  • Schreiben Sie Ihre Anwendung als Erweiterung zu einem vorhandenen Server (zum Beispiel Web-Server-Erweiterung über IIS, Apache APIs usw., Sendmail Milter etc) OR
  • Ändern eines vorhandenen Server RPC-Aufrufe an Ihre Anwendung zu machen, wie es Anfragen erhält.

Ihre eigene Implementierung des Protokolls zu schreiben, ist wahrscheinlich in einer Buggy Umsetzung mit Interoperabilitätsproblemen führen.

Ein interessantes Werkzeug, um dies zu tun ist, verdrehte , den Python-spezifisch ist, sondern klug und umfasst Implementierungen zahlreiche bestehende Protokolle (HTTP, SMTP, IRC usw.).

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