对 akka http 的大响应
Large response with akka http
我正在测试 akka-http,平均响应大小约为 ~156KB。如果我 运行 按顺序进行测试,我也可以在使用 akka-http 实现的客户端中获得响应。
但是如果我在端点 运行 并发请求(8 个请求),我只会得到前三个的响应。
在本地测试 运行。
这是服务器代码;
val text = Source.fromInputStream(getClass.getResourceAsStream("/data/data.txt")).mkString
val route =
path("build") {
get {
complete {
Future {
println("Finished")
//HttpEntity.Strict(ContentTypes.`text/html(UTF-8)`, ByteString(text))
HttpEntity(ContentTypes.`text/html(UTF-8)`, text)
}
}
}
}
这是客户端代码;
(1 to 8).map { i =>
val res = buildRequest.map { br =>
println(br)
TestResult(true, startTime, System.currentTimeMillis, d, None)
}.recoverWith { case t =>
println(t)
Future.successful(TestResult(false, startTime, System.currentTimeMillis, d, Some(t.getMessage)))
}
}
..
..
def buildRequest = Source.single(HttpRequest(uri = "/build") -> 1)
.via(poolClientFlow)
.runWith(Sink.head)
您包含的客户端代码不使用响应的实体,这可能会导致您遇到问题。您需要使用整个响应实体或丢弃它。有关此问题的进一步说明以及如何解决它,请参阅 here。
我正在测试 akka-http,平均响应大小约为 ~156KB。如果我 运行 按顺序进行测试,我也可以在使用 akka-http 实现的客户端中获得响应。
但是如果我在端点 运行 并发请求(8 个请求),我只会得到前三个的响应。
在本地测试 运行。
这是服务器代码;
val text = Source.fromInputStream(getClass.getResourceAsStream("/data/data.txt")).mkString
val route =
path("build") {
get {
complete {
Future {
println("Finished")
//HttpEntity.Strict(ContentTypes.`text/html(UTF-8)`, ByteString(text))
HttpEntity(ContentTypes.`text/html(UTF-8)`, text)
}
}
}
}
这是客户端代码;
(1 to 8).map { i =>
val res = buildRequest.map { br =>
println(br)
TestResult(true, startTime, System.currentTimeMillis, d, None)
}.recoverWith { case t =>
println(t)
Future.successful(TestResult(false, startTime, System.currentTimeMillis, d, Some(t.getMessage)))
}
}
..
..
def buildRequest = Source.single(HttpRequest(uri = "/build") -> 1)
.via(poolClientFlow)
.runWith(Sink.head)
您包含的客户端代码不使用响应的实体,这可能会导致您遇到问题。您需要使用整个响应实体或丢弃它。有关此问题的进一步说明以及如何解决它,请参阅 here。