[英]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.