gpt4 book ai didi

java - Netty:如何限制每秒的Websocket channel 消息数?

转载 作者:行者123 更新时间:2023-12-02 02:13:32 25 4
gpt4 key购买 nike

我需要限制 netty 服务器每秒在 websocket channel 上接收的消息。找不到任何想法如何做到这一点。

任何想法将不胜感激

谢谢

最佳答案

您需要将简单的 ChannelInboundHandlerAdapter 处理程序添加到管道中,并将简单的计数器添加到 channelRead(ChannelHandlerContext ctx, Object msg) 方法。我建议您为此目的使用一些 CodaHale Metrics 类。

伪代码:

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 实现使用简化版本 Meter CodaHale Metrics 库的类。

关于java - Netty:如何限制每秒的Websocket channel 消息数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49610499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com