【问题标题】:Accessing an instance of Netty server from inside a Netty Handler从 Netty 处理程序内部访问 Netty 服务器实例
【发布时间】:2014-05-24 00:33:35
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: java netty


    【解决方案1】:

    如果您有多个 eventLoop,您将可以跨多个 eventLoops 并发访问静态 ArrayList。所以是的,您应该注意同步对 ArrayList 的访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 2019-09-16
      • 2013-03-06
      • 1970-01-01
      • 2021-09-28
      • 2012-12-30
      • 2012-02-19
      相关资源
      最近更新 更多