2016-03-21 3 views
0

Ich habe viele Beispiele in netty Projekt gesucht und sie scheinen einfach und großartig. Eines haben jedoch die Decoder gemeinsam: Sie lesen zuerst einen Header und wissen dann im Voraus, wie viele Bytes sie lesen sollen.Wie Puffer in Netty mit unbekannter Länge dekodieren?

Ich muss komplexere Protokoll implementieren. Es ist eine proprietäre Binärprotokolls errichtetem wie folgt aus:

+--------+-----------+------------+-------+------------+-------+-----------+ 
| header | msg_count | msg_type_1 | msg_1 | msg_type_n | msg_n | msg_count | 
+--------+-----------+------------+-------+------------+-------+-----------+ 
11 bytes 1 byte  1 byte  bytes  1 byte  bytes  1 byte 

Header-Seriennummer enthält. Dann gibt es Nachrichtenanzahl und n Nachrichten. Diese Nachrichten sind unterschiedlich lang. Am Ende der Übertragung wird die Nachrichtenanzahl erneut aktualisiert und es ist ein Zeichen für eine abgeschlossene Übertragung.

Nachrichten können verschiedene Typen haben. Einige Typen haben eine feste Breite, aber einige Typen variieren, z. .: g

  • msg Typ 0x01: feste Breite von 4 Bytes
  • msg Typ 0x02: erster Byte - Nachrichtenlänge von m, dann m Bytes

Ich habe keine Ahnung, wie um den Netty-Decoder für ein solches Protokoll zu implementieren. Das Hauptproblem hier ist, dass es kein klares Zeichen für ein Ende gibt, bis ich tatsächlich den gesamten Puffer analysiere - Nachrichten werden fein geparst und Nachrichtenzählung wird am Ende neu bewertet.

Gibt es einen Mechanismus in Netty, der mir helfen kann, diesen Fall zu lösen?

+0

woher wissen Sie, wann eine Nachricht endet und eine neue Nachricht beginnt? – jtahlborn

+0

@jtahlborn nach reprozed msg_count am Ende, kann ein weiterer Header sofort eintreffen. Es gibt kein Trennzeichen. –

+0

nein, woher kennst du die Grenze zwischen msg_1 und msg_type_n? – jtahlborn

Antwort

1

Zumindest sollten Sie in der Lage sein, eine ReplayingDecoder zu implementieren. Vielleicht nicht die effizienteste Implementierung, aber wahrscheinlich die einfachste.

Verwandte Themen