2013-11-20 76 views
0

我需要創建一個基於REST的Web服務,其中請求將被異步處理。 通過異步,我的意思是客戶端將發出請求,並繼續執行,等待服務的響應。是否有可能實現這一目標? 我需要在WebSphere Application Server中部署服務。RESTFul WebService中的異步請求

+0

這裏是一個很好的方法:http://restcookbook.com/Resources/asynchroneous-operations/ – EJK

回答

1

是的,你可以創建一個調用你的REST服務的Thread。也許你可以看到如何做到這一點的位置:

http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

+0

我將從我的web應用程序(客戶端基本上是一個servlet)訪問Web服務。據我所知,在Web應用程序中顯式創建線程並不是一個好習慣。 –

+1

通常,線程是一種有限的資源,創建它們時應該小心。這並不意味着使用線程是不好的做法。你怎麼做取決於你的應用需求。這個應用程序是否有望爲大量的併發用戶提供服務?如果是這樣,那麼你可能想看看線程池。 – EJK

+1

排隊是另一種考慮的方法。專用一個或多個後臺線程來處理這些請求。讓您的Web服務將請求放在全局可訪問的隊列中。後臺線程將一次處理一個請求。這種方法的優點是,您可以完全控制在任何給定時間存在多少個線程。 – EJK

5

所以我不知道,如果你的問題是關於如何做服務器,或如何處理一個RESTful的方式異步操作的異步處理。如果是後者,那麼這裏就是該方法的總結建議在:http://restcookbook.com/Resources/asynchroneous-operations/

代碼爲您服務的方法來

  • (一)處理請求的操作異步(使用一個單獨的 線程最有可能的) 。
  • (b)立即返回響應碼202-接受
  • (c)在響應正文中,返回一個表示請求操作狀態的URI。

那麼你的客戶端代碼:

  • (一)主呼服務方法。響應完成後,如果響應代碼是202,請注意正文中返回的URI。 (b)在後臺線程中,定期輪詢該URI,直到它返回操作完成的指示。
+0

這是一個更準確的描述https://www.adayinthelifeof.nl/2011/06/02/asynchronous-operations-in-rest/ – supernova