Channel与ChannelHandlerContext作用域分析

Channel与ChannelHandlerContext作用域分析_第1张图片
Channel和ChannelHandlerContext都实现了AttributeMap接口,用户的一个或多个用户定义的属性附加到他们。有时使用户感到困惑的是,一个 Channel和一个 ChannelHandlerContext拥有自己的用户定义属性存储空间。例如,在Channel放置属性“ KEY_X” Channel.attr(KEY_X).set(valueX),通过ChannelHandlerContext.attr(KEY_X).get()获取不到属性值,反之亦然。因为每一个Channel和ChannelHandlerContext实例都维护了一个自己的Map,这种行为不仅令人困惑,而且浪费内存。
为了解决此问题,Netty团队在4.1版本之后,在每一个Channel内部仅仅保留一个map,确保每个key之间的唯一性,因此每一个Channel不需要多个map。
Channel与ChannelHandlerContext作用域分析_第2张图片
可以发现,调用ChannelHandlerContext的attr(key)方法会直接调用Channel的attr(key)。

你可能感兴趣的:(netty)