来自these notes:
除非
ChannelHandler
注明ChannelHandler
,否则Netty永远不会同时调用@Sharable
方法。这与处理程序方法的类型无关 - 入站,出站或生命周期事件处理程序方法。
我没有问题。然而,我的问题是,是否有可能在同一时间,在管道的不同阶段从同一个频道读取/处理两个不同的消息。
例如,请考虑以下管道(仅ChannelInboundHandler
):
+-----------+ | Handler 2 | +-----------+ ^ | +-----------+ | Handler 1 | +-----------+ ^ | +-----------+ | I/O read | +-----------+
据我所知,除了Handler 1
之外,最多只有一个线程可能会调用Sharable
中的方法。但是,一个线程是否可以在Handler 2
中处理消息,而另一个线程正在处理Handler 1
中同一频道的消息?或者仅当当前消息到达管道末尾时才选择通道?
答案 0 :(得分:1)
只有在传入了EventExecutorGroup的情况下将ChannelHandler中的一个添加到管道中时才可以这样做。如果你没有使用其中一个,那么一切都将由EventLoop和一个Thread处理。