文档说明喷雾能够处理分块响应,但我找不到任何开始的例子.有我天真的实施:
object Main extends App {
implicit val system = ActorSystem()
import system.dispatcher
val log = Logging(system, getClass)
val ioBridge = IOExtension(system).ioBridge()
val httpClient = system.actorOf(Props(new HttpClient(ioBridge)))
val conduit = system.actorOf(
props = Props(new HttpConduit(httpClient, "localhost", 3000)),
name = "http-conduit"
)
val pipeline = HttpConduit.sendReceive(conduit)
val response = pipeline(
HttpRequest(
method = GET,
uri = "/output.cgi.xml"
)
)
response onComplete {
case Success(a) =>
log.info("Success: " + a)
system.shutdown()
case Failure(error) =>
log.error(error, "Failure")
system.shutdown()
}
}
Run Code Online (Sandbox Code Playgroud)
我已经设定response-chunk-aggregation-limit = 0,没有任何事情发生.
你能给我一些阅读分块响应的例子吗?
更新
我已经重写了我的代码如下:
object Main extends App {
implicit val system = ActorSystem()
import system.dispatcher
val log = Logging(system, getClass)
val ioBridge = IOExtension(system).ioBridge()
val httpClient = system.actorOf(Props(new HttpClient(ioBridge)))
actor(new Act {
httpClient ! Connect(new InetSocketAddress("localhost", 3000))
become {
case Connected(_) =>
log.info("connected")
sender ! HttpRequest(GET, "/output.cgi.xml")
case Closed(handle, reason) =>
log.info("closed: " + reason)
system.shutdown()
case ChunkedResponseStart(res) =>
log.info("start: " + res)
case MessageChunk(body, ext) =>
log.info("chunk: " + body)
case ChunkedMessageEnd(ext, trailer) =>
log.info("end: " + ext)
case m =>
log.info("received unknown message " + m)
system.shutdown()
}
})
}
Run Code Online (Sandbox Code Playgroud)
现在我在closed: ProtocolError(Aggregated response entity greater than configured limit of 1048576 bytes)建立连接后就收到了.
我的application.conf
spray.can {
client {
response-chunk-aggregation-limit = 0
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所注意到的,HttpConduit仅适用于聚合响应.你必须摔倒到喷雾罐层来处理单个块.
不幸的是,我们目前没有示例显示您将如何执行此操作.粗略地说,它的工作原理如下(在M7中):
response-chunk-aggregation-limit = 0Connect到httpClient演员并等待ConnectedHttpRequest给Connected邮件的发件人ChunkedResponseStart,MessageChunk和ChunkedResponseEnd.有关详细信息,请参阅http://spray.io/documentation/spray-can/http-client/#chunked-responses
与使用相反HttpConduit,这意味着您必须自己管理您的连接(如果这就是您使用HttpConduit的原因).在最近的夜晚,它变得更容易,因为新的HttpClient自动支持连接池等.如果您需要,您还可以在邮件列表中获得更多信息.
| 归档时间: |
|
| 查看次数: |
4433 次 |
| 最近记录: |