我试图使用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);
}

10-07 12:57