【问题标题】:Is Netty handler unique for each connection?每个连接的 Netty 处理程序是唯一的吗?
【发布时间】:2013-01-29 21:30:43
【问题描述】:

我一直在查看来自Netty website 的代理服务器示例:

示例源代码处理程序有一个 volatile 变量

private volatile Channel outboundChannel;

它负责连接到另一个服务器以进行代理的通道。

这让我想知道这是否是为代理实现多个连接的正确且安全的方法。

我希望允许多个连接(入站)连接到不同的出站,同时确保每个入站连接都唯一地链接到出站通道。

据我所知,Netty 会为每个连接生成一个新的管道。这是否意味着管道工厂新生成的处理程序专门用于新连接(通道)?

附言如果我的 Netty 服务器有 1,000 个活动连接,这是否意味着有 1,000 个不同的管道?

【问题讨论】:

    标签: java netty


    【解决方案1】:

    每个连接创建一个管道,但该管道可能包含共享和独占处理程序。一些处理程序不保持状态,并且可以将单个实例插入到多个 [所有] 管道中。 Netty 提供的可以共享的处理程序用ChannelHandler.Sharable 注释。请参阅此tutorial 中标题为共享和独占频道处理程序的部分。

    【讨论】:

    • 对,但是如果我为每个连接(即每个管道)声明一个独占通道处理程序,这是否意味着该通道处理程序仅专用于该特定连接?
    • 正确。您可以通过将所有状态保留在附件或 ChannelLocals 中来将给定的处理程序重新实现为可共享的。
    • 我担心资源收集问题。使用后如何释放处理程序资源?
    • 知道为什么内置HTTP handlers are not sharable吗?对于负载适中的 HTTP 服务器,这会对 GC 造成负担。
    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2013-03-23
    • 2019-09-16
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多