如何在 netty 中设置 TrafficCounter?
How to setup TrafficCounter in netty?
我正在编写一个需要跟踪 sent/received 字节和带宽的应用程序。我正在使用本身使用 Netty 5.0 的库。
我对 Netty 代码的唯一访问权限是扩展我正在使用的库的 class。
如何在此 class 中创建和设置 TrafficCounter?我无法在网络上找到任何有关如何执行此操作的示例(至少在 Netty 5.0 中找不到)。我有多个使用 Netty 的线程,所以我需要每个通道的流量。
您可以查看此 PR,其中仍然包含有关如何使用 TrafficCounter(实际上是 TrafficShapingHandler)的完整示例:
特别是 DiscardServer,它同时包含全局流量整形和渠道流量整形,其中最后一个 (ChannelTrafficShaping) 就是您要查找的那个。
那么你可能拥有的是:
bootstrap.handler(new ChannelInitializer<Channel>() {
@Override
public void initChannel(Channel channel) throws Exception {
getPacketProtocol().newClientSession(client, TcpClientSession.this);
channel.config().setOption(ChannelOption.IP_TOS, 0x18);
channel.config().setOption(ChannelOption.TCP_NODELAY, false);
ChannelPipeline pipeline = channel.pipeline();
refreshReadTimeoutHandler(channel);
refreshWriteTimeoutHandler(channel);
pipeline.addLast("encryption", new TcpPacketEncryptor(TcpClientSession.this));
pipeline.addLast("traffic", new ChannelTrafficShapingHandler(0, MAXCHANNELTHROUGHPUT, 1000)); // ADDED
pipeline.addLast("sizer", new TcpPacketSizer(TcpClientSession.this));
pipeline.addLast("codec", new TcpPacketCodec(TcpClientSession.this));
pipeline.addLast("manager", TcpClientSession.this);
}
}).group(this.group).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, getConnectTimeout() * 1000);
当然还要看看 API:Traffic and in particular ChannelTrafficShapingHandler
我正在编写一个需要跟踪 sent/received 字节和带宽的应用程序。我正在使用本身使用 Netty 5.0 的库。
我对 Netty 代码的唯一访问权限是扩展我正在使用的库的 class。
如何在此 class 中创建和设置 TrafficCounter?我无法在网络上找到任何有关如何执行此操作的示例(至少在 Netty 5.0 中找不到)。我有多个使用 Netty 的线程,所以我需要每个通道的流量。
您可以查看此 PR,其中仍然包含有关如何使用 TrafficCounter(实际上是 TrafficShapingHandler)的完整示例:
特别是 DiscardServer,它同时包含全局流量整形和渠道流量整形,其中最后一个 (ChannelTrafficShaping) 就是您要查找的那个。
那么你可能拥有的是:
bootstrap.handler(new ChannelInitializer<Channel>() {
@Override
public void initChannel(Channel channel) throws Exception {
getPacketProtocol().newClientSession(client, TcpClientSession.this);
channel.config().setOption(ChannelOption.IP_TOS, 0x18);
channel.config().setOption(ChannelOption.TCP_NODELAY, false);
ChannelPipeline pipeline = channel.pipeline();
refreshReadTimeoutHandler(channel);
refreshWriteTimeoutHandler(channel);
pipeline.addLast("encryption", new TcpPacketEncryptor(TcpClientSession.this));
pipeline.addLast("traffic", new ChannelTrafficShapingHandler(0, MAXCHANNELTHROUGHPUT, 1000)); // ADDED
pipeline.addLast("sizer", new TcpPacketSizer(TcpClientSession.this));
pipeline.addLast("codec", new TcpPacketCodec(TcpClientSession.this));
pipeline.addLast("manager", TcpClientSession.this);
}
}).group(this.group).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, getConnectTimeout() * 1000);
当然还要看看 API:Traffic and in particular ChannelTrafficShapingHandler