我是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
注释了这个类对变量的访问权限有何不同?
非常感谢!!
问候。
答案 0 :(得分:1)
这更像是一个Java问题,而不是特定于Netty的问题。由于llamadas
是一个静态类成员,无论你是否创建了ChannelHandler @Sharable
,你都需要进行同步,即你是否有多个通道处理程序实例,或者只有一个,你有一个{ {1}}你要附加。
通常,ArrayList
与处理程序一起使用,这些处理程序是“无状态”w.r.t通道,即不维护任何通道特定状态,因此您可以通过管道使用处理程序的单个实例。
有关此问题的详细解释,请参阅此tutorial。