在Netty中自定义管道创建

在Netty中自定义管道创建,netty,Netty,我正在尝试创建一个类,它拥有一个Netty客户端连接,并且能够接收所有通道事件,例如channelActive、exceptionCaught和channelRead,就像在管道末端一样 我的类可以通过如下调用创建客户端TCP连接: ChannelFuture cf = bootstrap.connect(address, port); cf.get().pipeline().addLast(this); 我想知道在创建通道时是否需要将我的类插入通道管道的末端,但我不确定如何在不丢失任何事件

我正在尝试创建一个类,它拥有一个Netty客户端连接,并且能够接收所有通道事件,例如channelActive、exceptionCaught和channelRead,就像在管道末端一样

我的类可以通过如下调用创建客户端TCP连接:

ChannelFuture cf = bootstrap.connect(address, port);
cf.get().pipeline().addLast(this);
我想知道在创建通道时是否需要将我的类插入通道管道的末端,但我不确定如何在不丢失任何事件(即来自远端的初始数据)的情况下执行该操作。通道管道是根据引导配置的方式创建的,因此我不知道如何安排将我的类最初添加到管道中

我可以等待建立连接,然后执行以下操作:

ChannelFuture cf = bootstrap.connect(address, port);
cf.get().pipeline().addLast(this);

但我不确定在这种情况下,我的类是否会很快被添加到管道中。例如,如果我这样做了,我还会看到channelActive事件吗?

如果你已经知道下面的想法,我表示歉意,但如果你不知道,我可能会有所帮助(引用自曼宁手册,这是一本了解所有事情的好书):

  • 保存引导的类通常具有处理程序配置—通常是初始值设定项
  • 对于ServerBootstrap(面向连接的协议,如TCP上的某些协议),可以使用handler和childhandler
“ServerBootstrap引导ServerChannel实现,它负责创建子通道…当接受新连接时,将创建一个新的子通道,通道初始值设定项将向通道的通道管道添加[handler]的实例。”

  • 当您初始化通道管道时,您设置了日志处理程序、解码器/编码器、请求/响应的顺序,包括用于ssl/分块文件处理等的任何高级类
  • 请求/响应处理程序通常包含或使用保存业务逻辑的其他类
  • 您可以从管道中动态添加/删除处理程序(如将管道从HTTP升级到WebSockets)
  • <> LI>如果您想在管道中间的某个地方拔出一条消息/放一条消息,NETY可以在ChhannHell上下文中运行,而不是流水线。
下面是一些很好的例子:

  • Netty源代码有一个示例文件夹
  • GitHub上的NettyAction有本书中的示例
  • 有一些简单易懂的例子

如果在通道初始值设定项中添加处理程序,它将获得所有事件