gpt4 book ai didi

java - 在 Akka Http 中发送大量对象列表

转载 作者:行者123 更新时间:2023-12-02 10:32:27 25 4
gpt4 key购买 nike

我在服务器端有一个很大的对象列表(可能有 1k-2k 存储在数据库中),需要根据客户端的请求使用 Akka Http 将其发送到多个客户端。简单的解决方案是我可以从服务器端的数据库检索它,创建对象列表的字节,然后将字节发送到客户端,然后将该字节转换为对象。

但问题是它会影响客户端和服务器的内存性能,因为列表非常大。

那么除了将对象的整个列表转换为字节之外,还有什么最好的方法可以实现这一点吗?

最佳答案

您的问题的答案涉及服务器端和客户端的几个步骤。注意:为了简洁起见,下面的所有代码示例都是用 scala 编写的,而不是用 java 编写的。在服务器端您需要实现:

<强>1。从数据库流式传输数据

another stack question/answer这解释了如何使用流方法从数据库中获取行。最终结果是您有一个行源:

type DataObject = ???

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

<强>2。将 DataObject 转换为字节

只有了解您的数据的具体情况才能回答此部分,并且听起来您已经实现了此部分:

val converter : DataObject => ByteString

<强>3。连接到 REST 端点

您可以使用akka-http设置客户端可以查询以获取数据的 REST 端点。 ByteString 值的 Source 将是为您的 HttpResponse

提供流实体的 Source

设置响应特定路径上的 GET 请求的 Route:

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

并使用路由来启动您的服务:

Http().bindAndHandle(route, "localhost", 8080)
<小时/>

在客户端有similar mechanisms用于从 HttpResponse 读取数据。

关于java - 在 Akka Http 中发送大量对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53538017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com