在Netty4中,为什么在OutboundHandler中同时读取和写入
我在Netty4中有一个问题,I/O事件由在Netty4中,为什么在OutboundHandler中同时读取和写入,netty,Netty,我在Netty4中有一个问题,I/O事件由ChannelInboundHandler或ChannelOutboundHandler处理 第一个问题是为什么在ChannelOutboundHandler中都使用读写方法 为什么要在fireChannelReadComplete()中触发read()方法?设计理念是什么 @覆盖 公共通道管道fireChannelReadComplete(){ head.fireChannelReadComplete(); if(channel.config().is
ChannelInboundHandler
或ChannelOutboundHandler
处理
ChannelOutboundHandler
中都使用读写方法李>
fireChannelReadComplete()
中触发read()
方法?设计理念是什么@覆盖
公共通道管道fireChannelReadComplete(){
head.fireChannelReadComplete();
if(channel.config().isAutoRead()){
read();
}
归还这个;
}
入站处理程序应该处理入站事件。事件由外部刺激触发,例如从插座接收的数据
出站处理程序应该拦截应用程序发出的操作
Re:Q1)read()
是一个可以发出的操作,告诉Netty继续从套接字读取入站数据,这就是它位于出站处理程序中的原因
Re:Q2)您通常不会发出read()
操作,因为如果autoRead
属性设置为true
,Netty会自动为您执行该操作。自动读取
打开时的典型流量:
channelActive
,然后向其自身发出read()
请求(请参阅DefaultChannelPipeline.fireChannelActive()
)read()
请求从套接字读取一些内容channelRead()
channelReadComplete()
read()
请求以继续从套接字读取如果禁用了
autoRead
,则必须手动发出read()
请求。有时关闭自动读取
会很有用。例如,您可能希望通过将接收到的数据保存在内核空间中来实现背压机制。这种推理不具有说服力。入站和出站的定义通常基于数据流的方向,而不是基于谁呼叫谁的方向。在我看来,这似乎是一个糟糕的设计,为什么你会要求通道出站处理程序读取?完全违反直觉/也称为糟糕的设计