我正在使用Akka-HTTP以字符串[30 - 40 MB]的形式返回響應。Akka-HTTP返回響應塊
當我部署我的Akka-HTTP服務器並請求從某個URI獲取數據時,每次在數MB後停止並停止獲取完整響應。
有沒有什麼辦法可以讓我回復我的整個大反應,而不會陷入兩者之間。
的HttpResponse(StatusCodes.OK,實體= myLargeResponseAsString)
感謝
我正在使用Akka-HTTP以字符串[30 - 40 MB]的形式返回響應。Akka-HTTP返回響應塊
當我部署我的Akka-HTTP服務器並請求從某個URI獲取數據時,每次在數MB後停止並停止獲取完整響應。
有沒有什麼辦法可以讓我回復我的整個大反應,而不會陷入兩者之間。
的HttpResponse(StatusCodes.OK,實體= myLargeResponseAsString)
感謝
也許這可以幫助:
path("yourpath") {
get {
complete {
val str2 = scala.io.Source.fromFile("/tmp/t.log", "UTF8").mkString
val str = Source.single(ByteString(str2))
HttpResponse(entity = HttpEntity.Chunked.fromData(ContentTypes.`text/plain(UTF-8)`, str))
}
}
確保你發送一些有效載荷,val str = Source.single(ByteString(「hello」))至少在Chrome中起作用 – EmiCareOfCell44
是的,我知道但是我發送了40MB的數據其不同的場景 –
這使用curl的代碼可以完美地讀取300Mb或更高的字符串,而無需更改ContentType標頭。但是,瀏覽器試圖渲染每個4MB或5MB的每串數據,這些數據毫無意義。該過程非常緩慢並且連接被中止。爲避免這種情況,您必須將標題更改爲ContentTypes.'application/octet-stream',並且它將與您創建一個文件路徑。 – EmiCareOfCell44
是否 「大回應」 來從一個巨大的字符串在你的控制之外的某個地方,或者你正在收集/連接它嗎?因爲Akka HTTP的好處之一就是不必這樣做,而是在數據到達時對其進行流式處理。 – johanandren
我直接從Apache Solr獲得這個巨大的響應。 Solr以字符串的形式返回這個大的響應。 –