我有玩!在通过发送 http 请求与另一台服务器通信的 Scala 应用程序上。该系统有局限性:一个令牌只能同时处理 5 个 http 请求。
我写了这个方法:
import scala.concurrent.ExecutionContext.Implicits.global
private def sendApiRequest(method: String, params: Option[JsValue] = None)(implicit token: String): Future[JsObject] = {
if (concurrentRequests.get(token).isEmpty) {
concurrentRequests += token -> 1
} else {
concurrentRequests += token -> (concurrentRequests.get(token).get + 1)
}
println(s"$token: ${concurrentRequests.get(token).get}")
val request = WS.url(API_URL)
.withMethod("POST")
.withBody(Json.obj(
"application_id" -> clientId,
"method" -> method,
"token" -> token,
"param" -> params
))
request.execute().map(response => {
val result = response.json.as[JsObject]
if (!result.keys.contains("data")) {
throw new Exception(result.toString())
} else {
result
}
})
}
有些演员使用这种方法,几秒钟后我得到了这个异常。
我的问题是:如何控制“运行模式”中的功能数量?也许我应该使用另一个执行上下文而不是默认的?请解释我或对执行上下文、线程等进行很好的介绍
我想尽快从远程服务获取信息,而不是一一发送
谢谢!