Netty,如何通过所有处理程序存储数据

时间:2018-02-26 03:01:58

标签: java multithreading synchronization thread-safety netty

我是Netty的新手,我有一个关于将客户端收到的数据存储在服务器中的问题,以供以后的客户咨询。

如果我将管道定义如下:

ch.pipeline().addLast(new ServerHandler());

我可以在ServerHandler中定义一个类变量,如下所示吗?

public class ServerHandler extends ChannelInboundHandlerAdapter {

private static final ArrayList<String> llamadas = new ArrayList<String>();
....

在使用之后它会像这样在所有客户身上使用吗?

synchronized(llamadas) {
            llamadas.add(mensaje);
}

另外,我想问一下,如果我只创建一个ServerHandler实例

,是否有任何区别
ch.pipeline().addLast(serverHandler);

我用@Sharable

注释了这个类

对变量的访问权限有何不同?

非常感谢!!

问候。

1 个答案:

答案 0 :(得分:1)

这更像是一个Java问题,而不是特定于Netty的问题。由于llamadas是一个静态类成员,无论你是否创建了ChannelHandler @Sharable,你都需要进行同步,即你是否有多个通道处理程序实例,或者只有一个,你有一个{ {1}}你要附加。

通常,ArrayList与处理程序一起使用,这些处理程序是“无状态”w.r.t通道,即不维护任何通道特定状态,因此您可以通过管道使用处理程序的单个实例。 有关此问题的详细解释,请参阅此tutorial