客户端和服务器应用程序需要在Java
中实现。该方案需要从服务器端的数据库中读取大量小对象,并将它们发送给客户端。
根据我以前的经验,.NET的WCF框架支持
上面的场景transferMode
StreamedResponse
IEnumerable
个对象的能力yield
推迟序列化是否有一个Java框架可以按照客户请求流式传输对象,同时保持与客户端的连接打开?
注意:这听起来像是一个非常笼统的问题,但我希望能够提供具体的细节,希望能够为我和其他可能的人带来明确的答案。
答案 0 :(得分:0)
标准方法是使用一种分页形式,并将结果以块的形式获得,这些块可以临时存储在内存中。具体取决于具体方法,但基本的JDBC方法是首先执行一个语句来查找记录数,然后以块的形式获取它们。例如,Oracle有一个ROWNUM列,您可以使用该列来管理要返回的记录范围。其他数据库还有其他一些选择。
答案 1 :(得分:0)
您可以使用ObjectOutputStream / ObjectInputStream来执行此操作
实现这项工作的关键是定期在输出流上调用reset()
。如果你不这样做,发送端和接收端将构建一个海量地图,其中包含对流上发送/接收的所有对象的引用。
但是,长时间保持单个请求/响应(或数据库游标)处于打开状态可能存在问题。恢复失败的流可能会有问题。因此,您的解决方案可能应该将上述内容与某种分页相结合。
另一点需要注意的是,可扩展的解决方案需要避免网络延迟成为瓶颈。可能值得实现一个接收器线程,它急切地从流中提取对象并将它们缓存在(有界)队列中。