【问题标题】:REST Server to client communicationREST 服务器到客户端的通信
【发布时间】:2017-02-02 10:23:46
【问题描述】:

我正在为 Spring 中的 Adndroid 应用程序开发 Java API。现在我的 API 是 100% REST 和无状态的。客户端要接收数据,必须先发送请求。

但是,我需要的是服务器将数据发送到客户端/而不是客户端首先发送到服务器/只要它准备好执行任务。

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

我的问题是:当服务器准备好执行任务时,如何实现服务器向客户端发送数据的功能? /不知道任务需要多长时间。/

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

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

【问题讨论】:

  • 切换到网络套接字通信是否可行?这样你就可以异步通信了
  • 谢谢,我马上查一下
  • 另一种选择是使用 JMS 主题,并让服务器在数据准备好时在主题上放置一条消息,当客户端收到有关该主题的消息时,客户端将监听该主题,客户端将调用服务器的服务来获取数据。参考:docs.oracle.com/javaee/6/tutorial/doc/bncdq.html
  • @mangotang 谢谢!这可能有效

标签: java spring rest api


【解决方案1】:

有多种选择。您可以选择最适合您的。

  1. Http 长轮询 - 在这种情况下,服务器会保留请求,直到它准备好执行任务(在您的情况下)。在这里,您不必每隔几秒发出多个请求(即 Http Polling)。

  2. 服务器发送事件 - 在这种情况下,服务器无需长轮询就向客户端发送更新。它是 HTML 5 的标准化部分 - https://www.w3.org/TR/eventsource/

  3. Websockets - 嗯,websockets 在双工模式下工作,在这种模式下建立了一个持久的 TCP 连接。一旦建立 TCP 连接,服务器和客户端都会来回发送数据。大多数现代浏览器都支持。您可以检查 Android Websocket 库,例如 autobahn 和 Java websocket。

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

【讨论】:

  • 谢谢!我想我会使用 WebSockets,但 this 会与 Andorid 一起使用吗?
  • 使用安卓系统?这是一个服务器端代码。您需要将服务器的端点公开为 websocket 端点,并使用 android websocket 库与服务器连接和交互。
  • 好的,我会想办法的。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 2018-04-12
  • 1970-01-01
  • 2015-12-25
  • 2016-05-16
  • 2019-11-14
  • 2012-12-26
相关资源
最近更新 更多