ChannelHandler在实例字段中存储状态和使用属性的状态之间有什么区别?

时间:2019-06-26 16:31:07

标签: netty

我有一个ChannelHandler实现,该实现当前在收到HttpRequest消息时设置一个实例字段,并在收到HttpContent消息和null时使用该字段当收到LastHttpContent消息时,请离开该字段。因此,ChannelHandler实现类没有用@Sharable注释。

如果我将此状态放在属性而不是实例字段中会发生什么?有什么显着差异吗?我认为这仍然不允许我的ChannelHandler实现可共享吗?

(使用Netty 4.1.36。)

2 个答案:

答案 0 :(得分:0)

是的。只要您的处理程序不包含任何状态,就可以使用@Sharable对其进行注释,并仅创建该状态的一个实例。反过来,您的ChannelInitializer可以将该实例添加到每个新的Channel中,而不必为每个连接创建一个新实例。

答案 1 :(得分:0)

如果只能从同一ChannelHandler访问状态,请在和属性上使用实例字段。如果您需要在一个处理程序中设置状态而在其他处理程序中访问状态,则很适合使用属性。