Ich fing gerade an, auf Netty 4 zu kodieren und fand, dass es scheint, nur einzelnes Trennzeichen zu stützen, obwohl es behauptet, mehrere Trennzeichen zu stützen. Tatsache ist, dass es die Verwendung mehrerer Trennzeichen anstelle von gleichzeitig unterstützt.Wie fügt man Kopf und Schwanz Delimiter Frame Decoder in Netty 4?
Der Grund, warum ich sowohl Kopf- als auch Endbegrenzer brauche, ist der Geschwindigkeit zuliebe, wenn es Fälle von Paketverlust oder Out-of-Order-Paketen gibt. Zum Beispiel Meine Frames sehen so aus: $ _ {LEN} {DATA}
Also ist der Kopfbegrenzer für mich $ _, während der letzte ist \ r \ n.
Angenommen, es werden mehrere Pakete in einem Frame empfangen, während einige der Zwischenpakete während der Übertragung verloren gehen, wenn ohne $ der Decoder weiter nach \ r \ n suchen muss, um das Ende zu bestimmen. Was ist, wenn \ r \ n auch verloren ist, dann muss es nach dem nächsten \ r \ n suchen, anstatt das $ zu treffen, das eine neue Nachricht ...
führt, aber es scheint, dass netty DelimiterBasedFrameDecoder was nicht unterstützen konnte Ich will oben. Wie soll ich mein eigenes für diesen Zweck implementieren?
Es sieht für mich Netty FrameDecoder Design berücksichtigt Paketverlust oder Packer nicht aus der Bestellung Fälle? Ich könnte mich damit bei Netty geirrt haben. Bitte, bitte, wenn es jemanden gibt, der mir Licht geben kann.
Verwenden Sie UDP- oder Tcp-Streams? Bei UDP-Streams werden die empfangenen Bytes normalerweise nicht erneut gesendet. – Ferrybig
TCP-Streams: Der Server wird in einem Cloud-Rechenzentrum ausgeführt, die Client-Geräte sind entweder über WiFi LAN oder 3G/2G SIM Mobile Wireless WAN verbunden. Daher kann das Netzwerk instabil und anfällig für Netzwerkinterferenzen sein, die normalerweise Paketverluste verursachen ... –
Beachten Sie, dass tcp entweder die Daten so wie sie sind (also keine Änderungen) oder einen Verbindungsfehler garantiert. Dies bedeutet, dass kein Teil des Pakets verloren gehen sollte. – Ferrybig