簡體   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