我有一个ChannelHandler
实现,该实现当前在收到HttpRequest
消息时设置一个实例字段,并在收到HttpContent
消息和null
时使用该字段当收到LastHttpContent
消息时,请离开该字段。因此,ChannelHandler
实现类没有用@Sharable
注释。
如果我将此状态放在属性而不是实例字段中会发生什么?有什么显着差异吗?我认为这仍然不允许我的ChannelHandler
实现可共享吗?
(使用Netty 4.1.36。)
答案 0 :(得分:0)
是的。只要您的处理程序不包含任何状态,就可以使用@Sharable
对其进行注释,并仅创建该状态的一个实例。反过来,您的ChannelInitializer
可以将该实例添加到每个新的Channel
中,而不必为每个连接创建一个新实例。
答案 1 :(得分:0)
如果只能从同一ChannelHandler访问状态,请在和属性上使用实例字段。如果您需要在一个处理程序中设置状态而在其他处理程序中访问状态,则很适合使用属性。