REST服务器与客户端通信

6

我正在使用Spring为Android应用开发Java API。目前我的API是100%的REST和无状态的。客户端需要先发送请求才能收到数据。

但是,我需要的是服务器在准备好任务后向客户端发送数据,而不是客户端首先向服务器发送数据。

我认为必须在两个方之间创建某种会话。

我的问题是:如何实现SERVER在准备好任务后向CLIENT发送数据的功能?/无法确定任务需要多长时间/

我应该为此开发什么样的API?

一个愚蠢的解决方法是每n秒向服务器发送一次请求,但我正在寻求更智能的方法。


Note: "Adndroid" typo corrected to "Android".

1
切换到WebSockets通信是否可行?这样您就可以异步通信了。 - mvlupan
谢谢,我会立即检查它。 - BabbevDan
另一个选项是使用JMS主题,当数据准备好时,服务器会将消息放置在主题上,客户端将侦听主题,当客户端在主题上接收到消息时,客户端将调用服务器的服务以获取数据。参考:http://docs.oracle.com/javaee/6/tutorial/doc/bncdq.html - StvnBrkdll
@mangotang 谢谢!这可能有效。 - BabbevDan
1个回答

6

有多个选项可供选择。您可以选择最适合自己的。

  1. Http长轮询 - 在此选项中,服务器将保持请求,直到准备完其任务(在您的情况下)。 这里,您不必每隔几秒钟进行多次请求(这是Http轮询)。

  2. 服务器发送事件 - 在此选项中,服务器向客户端发送更新,而无需进行长轮询。 它是HTML 5的标准化部分 - https://www.w3.org/TR/eventsource/

  3. Websockets - 好吧,Websockets以双工模式工作,在其中建立持久的TCP连接。 一旦建立TCP连接,服务器和客户端都可以发送数据。 大多数现代浏览器都支持它。 您可以查看Android Websocket Library,例如autobahn和Java websocket。

  4. SockJs - 我建议使用此选项而不是普通WebSocket。 http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#websocket-fallback-sockjs-enable


谢谢!我想我会使用WebSockets,但是这个能在安卓上工作吗? - BabbevDan
你在使用Android吗?这是一个服务器端的代码。你需要将你的服务器端点公开为websocket端点,并使用Android websocket库来连接和与服务器进行交互。 - Mansoor
好的,我会想办法解决的。谢谢 :) - BabbevDan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接