【发布时间】:2014-05-24 00:33:35
【问题描述】:
我正在为多人游戏编写 Netty 服务器,但我不确定是否需要以某种方式同步服务器中存在但由 ChannelHandler 访问的变量。
在服务器级别,我使用 ArrayList 来存储服务器将提供的不同匹配项。
每个匹配将引用 2 个通道(我为每个匹配存储 ChannelHandlerContetx)。
当我创建从 SimpleChannelInboundHandler 扩展的 ChannelHandler 时,我将服务器实例传递给构造函数,并将服务器作为实例变量存储在处理程序中。
当 channelActive 被触发时,ChannerlHandler 将在处于“等待”状态的 ArrayList(位于服务器实例中)中搜索匹配项。如果它找到一个它绑定到它并更改匹配状态。如果没有创建新的匹配,则通道绑定到它,使其处于等待状态。
我知道通道是线程安全的。但是这里不同的通道访问的是同一个服务器的 ArrayList 实例。
在这种情况下,我应该注意同步对 ArrayList 的访问吗?
请注意,如果它增加了我的问题:由于我将在后端拥有一个数据库,因此在创建处理程序时,我将在 .addLast() 方法中传递一个 DefaultEventExecutor。
【问题讨论】: