簡體   English   中英

在Akka Http中發送大量對象

[英]Send large List of Objects in Akka Http

我在服務器端有大量對象(可能存儲在db中的1k-2k),需要根據客戶端的請求使用Akka Http發送到多個客戶端。 一種簡單的解決方案是,我可以從服務器端的數據庫中檢索它,生成一個對象列表的字節,然后將字節發送給客戶端,然后將該字節轉換為對象。

但是問題在於它會影響客戶端和服務器上的內存性能,因為列表很大。

那么,除了將對象的整個列表轉換為字節之外,還有什么最佳的方法可以實現此目的?

您問題的答案涉及服務器端和客戶端的幾個步驟。 注意:以下所有代碼示例都在scala中而不是java中,以簡潔起見。 在服務器端,您需要實現:

1.從數據庫流式傳輸數據

還有另一個堆棧問題/答案 ,解釋了如何使用流方法從數據庫中獲取行。 最終結果是您有一個行源:

type DataObject = ???

val source : Source[DataObject,_] = ??? // see linked answer

2.將DataObject轉換為字節

只有知道數據的詳細信息,才能回答此部分,並且聽起來您已經實現了此部分:

val converter : DataObject => ByteString

3.附加到REST端點

您可以使用akka-http設置REST端點,客戶端可以查詢該REST端點以獲取數據。 Source你的ByteString值將成為源供給流實體為您HttpResponse

設置一個Route ,響應GET特定路徑上的請求:

val route : Route = 
  get {
    path("/queryDB") {
      complete(HttpResponse(entity = HttpEntity(ContentTypes.`application/octet-stream`, source.map(converter))))
    }
  }

並使用“路線”啟動服務:

Http().bindAndHandle(route, "localhost", 8080)

在客戶端,有類似的機制可以從HttpResponse中讀取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM