题
在Netty中,有人知道ChannelBuffer是否将上游事件传递给处理程序(在您从channelevent /或MessageEvent施放之后)是否会在处理时同时写给Netty Framework?
用户指南和示例不能明确阐明这是否会发生。
例如,想象以下在扩展SimpleChannelHandler的类中的方法,并在Netty服务器上被绑定为处理程序:
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
{
ChannelBuffer buffer = (ChannelBuffer) e.getMessage();
if (buffer.readableBytes() == 4)
{
// Is it possible for the number of readable bytes to increase here?
}
}
在上面的方法中,是否有可能在评论行上增加可读字节的数量(假设客户端仍在发送数据),或者是否可以保证这些帧是单独的消息而不是写入所提供的缓冲区中的?
我要问的原因是要知道我是否应该在进行某些处理之前将缓冲区复制到本地缓冲区,或者这种副本是否是多余的。
解决方案
一旦Netty创造了 ChannelBuffer
并触发a MessageEvent
有了它,它脱离了Netty的手,因此Netty不会通过任何方式对其进行修改。处理程序或其他用户代码可以修改缓冲区,但通常,书面的处理程序不会干扰其他处理程序。如果一个坏处理程序会引用对接收的缓冲区的引用并稍后修改,那么您会看到损坏的缓冲区状态。
不隶属于 StackOverflow