【发布时间】:2017-10-19 02:12:34
【问题描述】:
查看文档,它是这样说的:
https://netty.io/4.0/api/io/netty/channel/ChannelPipeline.html
用户应该在管道中拥有一个或多个 ChannelHandler 接收 I/O 事件(例如读取)和请求 I/O 操作(例如 写入并关闭)。例如,典型的服务器将具有 在每个通道的管道中跟踪处理程序,但您的里程可能 根据协议的复杂性和特性而有所不同 和业务逻辑:
Protocol Decoder - 将二进制数据(例如 ByteBuf)翻译成 Java 目的。 协议编码器 - 将 Java 对象转换为二进制数据。
Business Logic Handler - 执行实际的业务逻辑(例如 数据库访问)。它可以表示为 以下示例:静态最终 EventExecutorGroup 组 = 新 DefaultEventExecutorGroup(16); ...
ChannelPipeline 管道 = ch.pipeline();
pipeline.addLast("解码器", new MyProtocolDecoder());
pipeline.addLast("encoder", new MyProtocolEncoder());
// 告诉管道运行 MyBusinessLogicHandler 的事件处理程序 方法 // 在与 I/O 线程不同的线程中,以便 I/O // 一个耗时的任务没有阻塞线程。 // 如果你的 业务逻辑是完全异步的或很快完成的,你 不要 // 需要指定一个组。
pipeline.addLast(group, "handler", 新的 MyBusinessLogicHandler());
在 Github 上的许多示例中,我看到了相同的模式。我想知道是否有人可以解释为什么 businessHandler 不在解码器和编码器之间。我认为你会得到你的 POJO,然后在业务处理程序中对其进行处理,然后对其进行编码。
【问题讨论】: