2017-08-03 126 views
0

我正在使用Akka-HTTP以字符串[30 - 40 MB]的形式返回響應。Akka-HTTP返回響應塊

當我部署我的Akka-HTTP服務器並請求從某個URI獲取數據時,每次在數MB後停止並停止獲取完整響應。

有沒有什麼辦法可以讓我回復我的整個大反應,而不會陷入兩者之間。

的HttpResponse(StatusCodes.OK,實體= myLargeResponseAsString)

感謝

+0

是否 「大回應」 來從一個巨大的字符串在你的控制之外的某個地方,或者你正在收集/連接它嗎?因爲Akka HTTP的好處之一就是不必這樣做,而是在數據到達時對其進行流式處理。 – johanandren

+0

我直接從Apache Solr獲得這個巨大的響應。 Solr以字符串的形式返回這個大的響應。 –

回答

0

也許這可以幫助:

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)) 
     } 
     } 
+0

確保你發送一些有效載荷,val str = Source.single(ByteString(「hello」))至少在Chrome中起作用 – EmiCareOfCell44

+0

是的,我知道但是我發送了40MB的數據其不同的場景 –

+0

這使用curl的代碼可以完美地讀取300Mb或更高的字符串,而無需更改ContentType標頭。但是,瀏覽器試圖渲染每個4MB或5MB的每串數據,這些數據毫無意義。該過程非常緩慢並且連接被中止。爲避免這種情況,您必須將標題更改爲ContentTypes.'application/octet-stream',並且它將與您創建一個文件路徑。 – EmiCareOfCell44