Channel 上的操作与 ChannelHandlerContext 上的操作有什么区别

What is the difference between operations on Channel vs operations on ChannelHandlerContext

我刚开始使用 Netty,我有一个关于 ChannelChannelHandlerContext

的问题

从我目前所读到的内容来看,Channel 可以看作是对发生 IO 的底层套接字的抽象,而 ChannelHandlerContext 是一个用于在通道之间传递信息的对象通道管道中的处理程序。

以上是否准确?

因为现在我正在查看一些使用 Netty 的代码库和在线示例,我发现在 ChannelChannelHandlerContext 上似乎都有相同的操作。例如:

ctx.channel().write();
vs
ctx.write();

ctx.channel().alloc()
vs
ctx.alloc()

问题是,为什么这些相似的操作都定义在 Channeland also onChannelHandlerContext` 上?它们有什么不同吗?在什么条件下应该优先选择另一个?

Channel.* 从管道尾部开始,而 Channel.* 从上下文所属的处理程序开始。通常在 ChannelHandler 中你总是想使用 ChannelHandlerContext 而在外面你最想使用 Channel.