Netty的通道处理程序(例如(SimpleChannelInboundHandler,ChannelInboundHandlerAdapter等))的实例是否共享相同的线程和堆栈,或者每个都拥有自己的线程和堆栈?我问,因为我实例化了许多通道处理程序,我需要它们相互通信,我必须决定使用线程通信还是非线程通信。
感谢您的回答
答案 0 :(得分:1)
答案:这取决于
我认为你必须要建立一个服务器,我说的一些可能不适用。
根据https://netty.io/4.0/api/io/netty/channel/ChannelHandler.html,确定通道处理程序运行的线程的一个因素是如何将其添加到管道中。 Netty允许为所有管道(即与服务器的连接)使用处理程序的单个实例,在这种情况下,您必须适应不同的线程。
相反,如果使用通道初始化程序向管道添加处理程序,则不需要在线程之间进行通信,因为每个连接都使用处理程序的不同实例。
还假设您使用多个工作线程来运行通道处理程序。您还必须考虑处理程序与哪个通道进行通信,如果您不使用通道初始化处理程序存储状态变量,则必须适应线程间通信。
您最好的选择是在做出决定之前调试每个处理程序中的当前线程,netty的线程行为以及它与您的程序的交互方式高度主观对您的实现以及您的位置正在移动你的数据。
答案 1 :(得分:1)
作为一般规则,如果你的处理程序有状态,那么它是每个通道(管道)的一个处理程序。否则,使用@ ChannelHandler.Sharable注释您的处理程序,并为每个通道使用相同的实例。