2016-09-24 180 views
3

我正在爲Spring中的Adndroid應用程序開發Java API。現在我的API是100%REST和無狀態的。爲了客戶端接收數據,它必須首先發送一個請求。REST服務器到客戶端通信

但是,我需要的是服務器發送數據到客戶端 /而不是客戶端到服務器fisrt /每當它準備好它的任務。

我認爲必須在雙方之間建立某種會話。

我的問題是:如何實現SERVER向客戶端發送數據的功能? /未知需要多長時間。/

我應該爲此目的開發哪種API?

一個愚蠢的解決方法是每隔n秒向服務器發送一個請求,但我正在尋求更智能的方法。

+1

會切換到網絡套接字通信工作嗎?這樣你可以異步溝通 – mvlupan

+0

謝謝,我馬上去檢查一下 – BabbevDan

+0

另一個選擇是使用JMS主題,並讓服務器在數據準備好的時候在主題上放置一條消息,客戶端將聽取主題,當客戶端收到有關該主題的消息時,客戶端將調用服務器的服務來獲取數據。 ref:http://docs.oracle.com/javaee/6/tutorial/doc/bncdq.html – mangotang

回答

3

有多個選項可用。你可以選擇最適合你的東西。

  1. Http長輪詢 - 在這,服務器持有該請求,直到它的任務(在你的情況)準備好了。在這裏,你不必每隔幾秒就做出多個請求(這是Http輪詢)。

  2. 服務器發送事件 - 在此,服務器發送更新到客戶端沒有長輪詢。它是HTML 5的標準化部分 - Websockets - 好吧,websockets工作在雙工模式下,並且在此建立一個持久的TCP連接。一旦建立了TCP連接,服務器和客戶端就會往返發送數據。受大多數現代瀏覽器支持。您可以檢查Android Websocket Library,如autobahn和Java websocket。

  3. SockJs - 我會推薦使用這個選項而不是普通的WebSocket。 http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#websocket-fallback-sockjs-enable

+0

謝謝!我想我會使用WebSockets,但是[this](https://spring.io/guides/gs/messaging-stomp-websocket/)與Andorid一起工作? – BabbevDan

+0

使用Android?這是一個服務器端代碼。您需要將服務器的端點暴露爲websocket端點,並使用android websocket庫來連接服務器並與之交互。 – Mansoor

+0

好的,我會弄明白的。謝謝 :) – BabbevDan