Netty:如何限制每秒 websocket 通道消息?
Posted
技术标签:
【中文标题】Netty:如何限制每秒 websocket 通道消息?【英文标题】:Netty: How to limit websocket channel messages per second? 【发布时间】:2018-04-02 11:34:01 【问题描述】:我需要限制 netty 服务器每秒在 websocket 通道上接收的消息。 找不到任何想法如何做到这一点。
任何想法将不胜感激
谢谢
【问题讨论】:
【参考方案1】:您需要将简单的ChannelInboundHandlerAdapter
处理程序添加到您的管道,并将简单的计数器添加到channelRead(ChannelHandlerContext ctx, Object msg)
方法。我建议您为此目的使用一些 CodaHale Metrics Class。
伪代码:
private final QuotaLimitChecker limitChecker;
public MessageDecoder()
this.limitChecker = new QuotaLimitChecker();
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg)
if (limitChecker.quotaReached(100)) //assume limit is 100 req per sec
return;
其中QuotaLimitChecker
是一个递增计数器并检查是否达到限制的类。
public class QuotaLimitChecker
private final static Logger log = LogManager.getLogger(QuotaLimitChecker.class);
private final int userQuotaLimit;
//here is specific implementation of Meter for your needs
private final InstanceLoadMeter quotaMeter;
public QuotaLimitChecker(int userQuotaLimit)
this.userQuotaLimit = userQuotaLimit;
this.quotaMeter = new InstanceLoadMeter();
public boolean quotaReached()
if (quotaMeter.getOneMinuteRate() > userQuotaLimit)
log.debug("User has exceeded message quota limit.");
return true;
quotaMeter.mark();
return false;
Here is 我对 QuotaLimitChecker
的实现,它使用了 CodaHale Metrics 库的简化版本 Meter 类。
【讨论】:
谢谢你,这正是我需要的:)以上是关于Netty:如何限制每秒 websocket 通道消息?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 websocket 检查消息是不是真的在 Netty 中传递?
netty,websocket,ipc(lpc和rpc),Nio之间的相互调用