2017-11-17 3 views
0

Ich bin nicht zu erfahren nety und habe eine Frage über die Dokumentation von ChannelPipeline. Hier ist, was es über genau das ist:Verwendung netty mit Geschäftslogik

static final EventExecutorGroup group = new DefaultEventExecutorGroup(16); 
... 

ChannelPipeline pipeline = ch.pipeline(); 

pipeline.addLast("decoder", new MyProtocolDecoder()); 
pipeline.addLast("encoder", new MyProtocolEncoder()); 

// Tell the pipeline to run MyBusinessLogicHandler's event handler methods 
// in a different thread than an I/O thread so that the I/O thread is not blocked by 
// a time-consuming task. 
// If your business logic is fully asynchronous or finished very quickly, you don't 
// need to specify a group. 
pipeline.addLast(group, "handler", new MyBusinessLogicHandler()); 

Ich verstehe nicht ganz, die MyBusinessLogicHandler Klasse. Sollte es DuplexChannelHandler oder etwas anderes implementieren? Zum Beispiel in meinem Fall habe ich die folgende Klasse:

public class Packet{} 

Ich möchte einige Byte-Sequenz in Packet entschlüsseln, geben MyBusinessLogicHandler die einige Packet produziert. und codiere es dann erneut in einen Byte-Strom, um es an einen Client zurückzusenden. Ich sehe es derzeit wie folgt aus:

public class MyBusinessLogicHandler extends SimpleChannelInboundHandler<MyModel>{ 
    public void channelRead0(ChannelHandlerContext ctx, Packet msg){ 
     Packet rslt = null; 
     //Do some complicated business logic 
     ctx.write(rslt); 
    } 
} 

Ich bin nicht sicher, ob es eine übliche Art und Weise, die Dinge in netty zu tun. Kannst du bitte klären?

Antwort

2

Yeap. Das ist völlig in Ordnung und korrekt für die Implementierung MyBusinessLogicHandler. Sie brauchen nicht DuplexChannelHandler als in Ihrer Pipeline haben Sie bereits MyProtocolEncoder (das heißt, implementiert ChannelOutboundHandler). Wenn Sie also ctx.write(rslt) aufrufen, lösen Sie das Schreib-Ereignis für ausgehende Handler aus.

wäre nur dann nützlich, wenn Sie sowohl Encoder als auch Decoder in derselben Klasse implementieren möchten. Beispielsweise können Sie das tun, indem Sie MyProtocolEncoder und MyProtocolDecoder beitreten.

+1

Verstanden! Vielen Dank. –