繁体   English   中英

管道化Web服务响应

[英]Pipelining web service response

我正在设计一个包装非常大的数据源的Web服务,对于我的设计是否合适或缺少明显更好的东西的任何建议,我将不胜感激。

所以这里是问题:我们有几个数据源,它们都提供相同的接口,而“最重要”的方法是RowIterator select(Table table, String where) 现在,从功能上来说,所有实现都可以正常运行,但是问题是,我们需要包装其中一个源的Web服务会在收到查询时(在一个简单的实现中)

  1. 等待包装的数据源返回整个结果集
  2. 在将结果集发送给客户端之前先整理其结果
  3. 在客户端解组整个结果集,然后再将其返回给调用方

仅在此顺序之后,呼叫者才能看到第一行。 这是一个非常令人失望的行为,因为调用方必须不必要地等待整个结果集两次。 我想进行一些流水线操作。 当服务仍在发送行时,调用者必须能够看到第一个结果。 现在,我计划通过实现封装在我的客户端行迭代器中的某种分页来克服这一问题。 该服务将维护一个会话ID(带有超时),该会话ID在接收到查询时创建,并且可用于获取数据块。 在将实际查询发送到包装的数据源之前,可能已经返回了会话ID。 然后,客户端将获取块(页面),直到块为空或小于预期的(=请求的)块大小为止。

因此,在这种设计中,当服务仍在发送行时,调用方将能够看到第一个结果。 但是,我想知道是否有一种方法可以使用SOAP Web服务在每行的基础上有效地传递结果?

另外,是否可以将结果返回给调用方,而无需反复询问更多结果?

最后,我使用MTOM以二进制形式传输数据,并在客户端和服务器上使用了阻塞队列来实现所需的并行性。 我在这里画了草图: 流式传输大型SOAP附件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM