使用 akka 流从服务器下载二进制数据
using akka streams for downloading binary data from server
在使用流时,我开始将我的下载处理抽象为 RunnableGraph
。
在这个 Graph
中,我使用一个 url 开始我的下载过程,我从 url 请求一个 HttpResponse
并评估 StatusCode
。如果有 Redirect
响应,我的进程会将 Location
header 值提供给 requestProcessor 并尝试再次下载它。
如果接收到 200,我的进程会累积二进制并将其发送到我的接收器。
我的问题:here 是我的推送语句,那个接收器永远不会收到任何数据:(
我希望我的习惯FlowShape
写对了,但可能隐藏了一个问题。
getAsyncCallback
适用于我的问题 jrudolph 如何在评论中描述。
将代码更改为:
def onGrab(current: HttpResponse): Unit = {
if (redirectCodes.contains(current.status) && current.header[Location].isDefined) {
push[String](redirect, current.header[Location].get.value())
current.entity.discardBytes()
pull(in)
} else {
logger.debug("download . . .")
current
.entity
.dataBytes
.map(_.toArray)
.runWith(Sink.head)
.foreach(
getAsyncCallback[Array[Byte]](value => push(out, value)).invoke
)
}
}
在使用流时,我开始将我的下载处理抽象为 RunnableGraph
。
在这个 Graph
中,我使用一个 url 开始我的下载过程,我从 url 请求一个 HttpResponse
并评估 StatusCode
。如果有 Redirect
响应,我的进程会将 Location
header 值提供给 requestProcessor 并尝试再次下载它。
如果接收到 200,我的进程会累积二进制并将其发送到我的接收器。
我的问题:here 是我的推送语句,那个接收器永远不会收到任何数据:(
我希望我的习惯FlowShape
写对了,但可能隐藏了一个问题。
getAsyncCallback
适用于我的问题 jrudolph 如何在评论中描述。
将代码更改为:
def onGrab(current: HttpResponse): Unit = {
if (redirectCodes.contains(current.status) && current.header[Location].isDefined) {
push[String](redirect, current.header[Location].get.value())
current.entity.discardBytes()
pull(in)
} else {
logger.debug("download . . .")
current
.entity
.dataBytes
.map(_.toArray)
.runWith(Sink.head)
.foreach(
getAsyncCallback[Array[Byte]](value => push(out, value)).invoke
)
}
}