2014-01-17 135 views
4

我在Google上搜索過很好,沒有任何東西能夠回答我的問題。由於我對網絡服務知之甚少(只是開始使用它們,而不是在過去幾個月內構建它們),我在想是否應該按照我的意願(在合理範圍內)頻繁地調用特定的Web服務,或者應該我建立請求一次完成。爲了給你舉個例子,我的應用程序被設計用來進行工作更新,對於某些類型的更新,它將調用Web服務。看起來我的選擇是我可以在需要Web服務的更新應用程序中創建一個數據表,並將整個數據表傳遞給Web服務,然後在Web服務中編寫一個方法來處理數據表的更新。或者,我可以遍歷整個更新表(其中包括比需要Web服務的更新更新),並在更新需要時調用Web服務。調用Web服務有多昂貴?

目前看來,將每個更新而不是數據表傳遞給Web服務會更簡單。

就傳遞到Web服務的數據而言,每個更新將包含少量數據(3個字符串,最長120個字符)。在更新數量方面,可能不會超過200個。

+0

我在想,爲什麼我從來沒有想過這樣? – xameeramir

回答

5

我想知道我是否可以按我希望的頻率調用特定的Web服務(在合理的範圍內),還是應該一次構建請求。

Web服務與否與否,通過網絡路由的任何呼叫都將受益於構建多個請求,以便它們可以在一次往返中處理。在你的情況下,建立一個代表所有更新的對象將是一個明顯的贏家,尤其是在連接速度較慢的設置中。

當你在網絡上的電話,這些東西都需要在客戶機到服務器(同樣,Web服務或沒有)進行通信的情況發生:與您的通話相關

  1. 數據被序列化的客戶
  2. 序列化的數據被髮送到服務器
  3. 服務器反序列化數據
  4. 服務器處理該數據,產生一個響應
  5. 服務器序列化響應
  6. 服務器發送串行化的響應返回給客戶端
  7. 的響應,客戶端

步驟2和6上反序列化通常會造成的延遲由於網絡延遲。對於簡單的操作,等待時間通常主導通話時間。

用於高頻交易的最快網絡上的等待時間以微秒爲單位;在普通的情況下,它以毫秒爲單位。如果您在1毫秒滯後(每次往返2毫秒)的網絡上逐個發送100個軟件包,則您只是在網絡延遲上浪費了200毫秒!這十分之一秒,很多時間是由當今CPU的標準決定的。如果你可以簡單地通過重組你的請求來消除它,這是一個很好的理由。

+0

我懷疑是這樣。我只是想知道Web服務是否具有很高的性能。其他更新是在另一個數據庫上完成的,我只需調用一個存儲過程並傳入每個更新(不必控制存儲過程),這不需要很長時間。我想知道如何與每次調用Web服務進行比較。 – sr28

+1

@ sr28 Web服務在普通分佈式呼叫之外不會帶來巨大的性能損失。順便說一下,因爲您正在討論存儲過程,所以這裏的類比非常方便:創建一些存儲過程的目的是爲了避免多次往返RDBMS服務器 - 實質上,出於與捆綁Web服務調用相同的原因,即使您的RDBMS經常位於與您的應用程序服務器相同的本地網絡上。與捆綁請求相關的複雜性小幅增加帶來了性能的顯着提高。 – dasblinkenlight

+0

這很方便知道Web服務不會帶來巨大的性能損失。然而,根據你的建議,我已經進入了數據路徑,對於錄製更新成功/失敗而言這可能稍微複雜一點,但你已經使我相信它的好處。 – sr28

1

您通常應該在粗粒度的遠程接口上使用粗粒度的遠程接口。

考慮爲每個呼叫添加10ms的網絡延遲 - 100次更新的延遲是多少?