我對netty很新,我想創建一個TCP服務器,它在實例化連接時執行自定義應用層握手。握手後,我想將消息(ByteBuf)傳遞給一個隊列,以便它們可以被其他線程處理。Netty pipleline中的多ChannelInboundHandlerAdapter
我的問題是,我可以在通道管道中有多個ChannelInboundHandlerAdapter嗎?一個用於應用層握手協議,另一個用於將消息傳遞給隊列。此外,我想知道消息如何流經管道。如果一個處理程序(或解碼器/編碼器)接收到消息,它是如何傳遞給另一個處理程序的。
具體而言,如果我從here更改EchoServer並添加另一個ChannelInboundHandlerAdapter,echo服務器處理程序將停止接收任何消息。
ServerBootstrap b = new ServerBootstrap();
b.group(group)
.channel(NioServerSocketChannel.class)
.localAddress(new InetSocketAddress(port))
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch)
throws Exception {
ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx,
Object msg) {
}
});
ch.pipeline().addLast(
new EchoServerHandler());
}
});
我的邏輯是:具有2 ChannelInboundHandlerAdapter的然後執行握手與所述第一處理器和丟棄報文,如果它們不匹配,握手條件,然後通過第二ChannelInboundHandlerAdapter傳遞消息到隊列。我的邏輯正確嗎?如果不是,它應該如何?
非常感謝。
我仍然有一些問題: 'ch.pipeline()addlast僅(新SimpleChannelInboundHandler
儘量不要調用'finally {in.release()}'看看這個線程http://stackoverflow.com/questions/23419433/netty-hello-world-example-not-working –