Netty 通道读取混乱

Netty channelread confusion

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

随着我深入探索,我无法理解某些事件或回调名称。例如,我无法理解以下内容之间的区别:

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

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

messageReceived(ChannelHandlerContext, I) { ...}

看到netty首页的例子都是用channelRead,但是网上有些例子用的是channelRead0。

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

更让我困惑的是,我还看到来自 JBOss 的 Netty 包,例如

org.jboss.netty.bootstrap.*;

除了

io.netty.bootstrap.ServerBootstrap;

新手入门和理解netty的合适方式是什么?

首先,在 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) { ... }

继承自ChannelInboundHandlerAdapterclass。方法:

messageReceived(ChannelHandlerContext, I) { ...}

用于Netty 3.X版本。

编辑: 添加@trustin(Netty 的创建者)评论,

channelRead0来自4.x的SimpleChannelInboundHandler,在Netty 5

中将重命名为messageReceived

希望对您有所帮助。