Netty - TCP Problem

MrPyro13

Neues Mitglied
Hallo Community,

ich sitze derzeit vor einem Problem, was sich einfach nicht lösen lassen möchte:
Ich schreibe derzeit ein Server-Client Applikation mit Netty und muss mehrer Pakete direkt hintereinander schicken. Diese wurden jedoch zusammengefasst, was im Decoder einen Fehler auslöst.
Da die Pakete ja über TCP verschickt werden, könnte man ja TCP_NODELAY und evtl. noch TCP_QUICKACK aktivieren und TCP_CORK deaktivieren. Damit die zu übertragenden Bytes nicht gepuffert, sondern direkt übertragen werden.
Auf meinem lokalen Rechner (Windows), funktionierte dies auch einwandfrei, doch nach dem ich es auf meinen Debian Rootserver hochgeladen habe, funktioniert es auf einmal nicht mehr.
Ich habe dann mein Netty Projekt auf Linux spezialisiert, indem ich nach diesem Schema die EventLoops ausgetauscht habe. Jedoch auch diese Maßnahme brachte nicht den gewünschten Erfolg.

Java:
       this.workerGroup = new EpollEventLoopGroup();
        this.bootstrap = new Bootstrap();

        bootstrap.group(workerGroup)
                .channel(EpollSocketChannel.class)
                .option(EpollChannelOption.SO_KEEPALIVE, false)
                .option(EpollChannelOption.TCP_CORK, false)
                .option(EpollChannelOption.TCP_NODELAY, true)
                .option(EpollChannelOption.TCP_QUICKACK, true)
                .handler(new ChannelInitializer<SocketChannel>() {
                    @Override
                    public void initChannel(SocketChannel channel) throws Exception {
                        channel.pipeline().addLast(new PacketEncoder(), new PacketDecoder(),
                                                   new ClientPacketHandler(clientType, prefix, clientPort));
                    }
                });

Ich hoffe nun, mir kann jemand aus diesem Forum bei diesem Problem helfen 🙂

LG MrPyro13
 
Da ich Netty auch schon sehr oft verwendet habe, kann ich dir aus Erfahrung sagen, dass dein Problem zu 98% in deinem Encoder & Decoder liegt.

Die Flags, die du setzt, haben mit deinem Problem gar nichts bzw. sehr wenig zu tun.
Was z.B. TCP_NODELAY bewirkt, kannst du auf Wikipedia nachlesen: https://de.wikipedia.org/wiki/Nagle-Algorithmus
D.h. dieses Flag kann manchmal Fehler verhindern, aber das ist nicht garantiert, solange du auf Server & Client-Seite nicht explizit wartest.
Dein Fehler hingegen ist ein reiner Fehler im Encoder / Decoder.
 
Schon mal daran gedacht, dass rpc-Framework von Google zu nutzen (grpc)
https://grpc.io/
die Nutzen auch netty. Für die Übertragung stehen unterschiedliche Modelle zur Verfügung. Für die Übertragung der Daten kommt das Protocol Buffer Format zum Einsatz. Es wird HTTP/2 zur Übertragung verwendet.
 

Neue Themen


Zurück
Oben