Netty渠道混乱

Mop*_*ath 4 netty

我3个月前开始使用Netty.最初它看起来非常简单和直接使用,因为我按照4.x系列主页中给出的示例.

由于我正在深入探索它,我无法理解某些事件或回调名称.例如,我无法理解以下内容之间的区别:

ChannelRead(ChannelHandleContext ctx, Object msg) { ... }

channelRead0(ChannelHandlerContext ctx, String message) { ... }

messageReceived(ChannelHandlerContext, I) { ...}
Run Code Online (Sandbox Code Playgroud)

看到netty主页的例子总是使用channelRead,但是互联网上的一些例子是指channelRead0.

另请阅读channelRead0重命名为messageReceived.如果我正在编写一个简单的服务器程序,我应该使用上述哪一个?

令我困惑的是,我也看到了来自JBOss的Netty软件包

org.jboss.netty.bootstrap.*;
Run Code Online (Sandbox Code Playgroud)

除了

io.netty.bootstrap.ServerBootstrap;
Run Code Online (Sandbox Code Playgroud)

新手开始和理解netty的适当方式是什么?

HCa*_*sko 6

首先,在Netty 3.X中,软件包来自org.jboss.netty.*:http: //netty.io/3.10/api/index.html但是启动Netty 4.X的包装来自io.netty.*:http://netty.io/4.0/ API/index.html的

现在,如果您使用Netty 4.X来阅读消息,请使用该方法

ChannelRead(ChannelHandleContext ctx, Object msg) { ... }
Run Code Online (Sandbox Code Playgroud)

继承自ChannelInboundHandlerAdapter班级.方法:

messageReceived(ChannelHandlerContext, I) { ...}
Run Code Online (Sandbox Code Playgroud)

用于Netty 3.X版本.

编辑:添加@trustin(Netty的开发者)评论,

channelRead0来自SimpleChannelInboundHandler4.x,它将messageReceived在Netty 5中重命名

希望能帮助到你.

  • 您是否还可以添加`channelRead0`来自4.x的`SimpleChannelInboundHandler`,它将在5中重命名为`messageReceived`? (2认同)