2016-09-24 348 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