【发布时间】:2014-11-26 02:39:25
【问题描述】:
我正在使用 Netty 开发一个 TCP 服务器。我知道通常的用法是创建一个 ServerBootstrap 并将一个 Initializer 对象传递给 childHandler() 方法。在 Initializer 中有一个 initChannel 方法,我们使用一堆 addLast 命令设置管道,添加诸如 DelimiterBasedFrameDecoder、StringEncoder 等内容。这假设我们先验地知道我们将始终获得文本/字符串消息。
但是,我想实现类似于 Python Twisted 协议(如 LineReceiver)中存在的功能,我们可以在原始模式和线路模式之间来回切换。是的,一种方法是动态地从管道中删除和添加项目。但我想知道是否有任何充分的理由为什么我不能只使用使用基本 ChannelInitializer 的最小管道,其中处理程序只是 ChannelInboundHandlerAdapter 的扩展。这样,处理程序中的 channelRead 方法只处理原始字节(在 ByteBuf 中)。如果我想使用行模式,我是否可以在 channelRead 方法中使用 DelimiterBasedFrameDecoder、StringEncoder 等,即直接调用它们并在管道上下文之外使用它们?我有什么理由不应该这样做吗?
【问题讨论】: