从Netty Handler内部访问Netty服务器的实例

时间:2014-05-24 00:33:35

标签: java netty

我正在为多人游戏编写Netty Server,我不确定是否需要以某种方式同步服务器中但由ChannelHandler访问的变量。

在服务器级别,我使用ArrayList来存储服务器将要服务的不同匹配。

每个匹配将引用2个通道(我为每个匹配存储ChannelHandlerContetx)。

当我创建从SimpleChannelInboundHandler扩展的ChannelHandler时,我将服务器的实例传递给构造函数,并将服务器作为实例变量存储在处理程序中。

当触发channelActive时,ChannerlHandler将在“等待”状态下搜索ArrayList(它位于服务器实例中)中的匹配项。如果它找到一个绑定它并改变匹配状态。如果没有创建新的匹配,然后通道绑定到它,使其处于等待状态。

我知道频道是线程安全的。但是这里不同的通道正在访问同一服务器的ArrayList实例。

在这种情况下,我应该注意同步对ArrayList的访问吗?

注意如果它添加到我的问题:因为我将在后端有一个数据库,我在创建处理程序时在.addLast()方法中传递一个DefaultEventExecutor。

1 个答案:

答案 0 :(得分:0)

如果您有多个eventLoop,那么您将跨多个eventLoops同时访问静态ArrayList。所以,您应该注意同步对ArrayList的访问。