我试图使用RateLimiter每秒以特定限制丢弃数据包。
final RateLimiter rateLimiter = RateLimiter.create(5000.0); // rate = 5000 permits per second
void submitPacket(byte[] packet) {
rateLimiter.acquire(packet.length);
networkService.send(packet);
}
问题是rateLimiter.acquire块而不是丢弃数据包。如果没有所需的带宽,如何配置rateLimiter丢弃数据包?
最佳答案
RateLimiter.tryAcquire
不会阻止,而是在不能立即获得许可的情况下返回false
。你可能会写像
if (rateLimiter.tryAcquire(packet.length)) {
networkService.send(packet);
}