问题描述
假设我有一个简单的 HTTP 客户端,有一个像这样的简单方法:
def httpGet(url: String)(implicit ec: ExecutionContext): Future[String] = Future {
io.Source.fromURL(url).mkString
}
假设我还针对具有速率和并发限制的服务器调用它。我认为这些限制应该在 ExecutionContext
中实施。
并发限制只是支持某些 java.util.concurrent.Executor
的 ExecutionContext
的线程数。速率限制也应该是 ExecutionContext
的一部分。因此,我们可以编写一个扩展 ExecutionContext
的新类来实现速率和并发限制,并使用此类的实例来调用 httpGet
。
class ExecutionContextWithRateAndConcurrencyLimits(
numThreads: Int,// for concurrency limit
rate: Rate // requests per time unit
) extends ExecutionContex { ... }
val ec = new ExecutionContextWithRateAndConcurrencyLimits(
numThreads = 100,rate = Rate(1000,1.sec)
)
val fut = httpGet(url)(ec)
您是否同意在 ExcecutionContext
中实施速率和并发限制?你知道这样的实现吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)