# Netty - TCP Problem



## MrPyro13 (7. Nov 2017)

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.


```
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


----------



## Flown (7. Nov 2017)

Das ist schon sehr Nettyspezifisch. Ich hoffe es gibt jemanden hier, der dir bei diesem Problem helfen kann.


----------



## JStein52 (7. Nov 2017)

Die Frage vielleicht mal da stellen:
We use StackOverflow as the place to ask the questions. Just tag your question with '*netty*', and then we will respond.


----------



## JuKu (17. Nov 2017)

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.


----------



## Manuel.R (24. Nov 2017)

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.


----------

