2016-09-24 2 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 Long Polling -이 경우 서버는 요청할 때까지 (자신의 경우) 요청을 보관합니다. 여기서는 몇 초마다 여러 요청을 수행 할 필요가 없습니다 (어느 것이 HTTP 폴링인지).

  2. 서버 보낸 이벤트 - 여기서 서버는 긴 폴링없이 클라이언트에 업데이트를 보냅니다. HTML5의 표준화 된 부분입니다 - https://www.w3.org/TR/eventsource/

  3. 웹 소켓 - 웹 모드는 이중 모드로 작동하며 영구 TCP 연결이 설정됩니다. TCP 연결이 설정되면 서버와 클라이언트 모두에서 데이터를주고받습니다. 대부분의 최신 브라우저에서 지원됩니다. Android 웹 소켓 라이브러리 (autobahn 및 Java websocket)를 확인할 수 있습니다.

  4. SockJs - 일반 WebSocket 대신이 옵션을 사용하는 것이 좋습니다. http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#websocket-fallback-sockjs-enable

+0

고마워요! 웹 소켓을 사용 하겠지만 Andorid와 [this] (https://spring.io/guides/gs/messaging-stomp-webocket/)는 작동합니까? – BabbevDan

+0

Android에서 사용 하시겠습니까? 이것은 서버 측 코드입니다. 서버의 끝점을 websocket 끝점으로 표시하고 android websocket 라이브러리를 사용하여 서버에 연결하고 서버와 상호 작용해야합니다. – Mansoor

+0

좋아, 알아낼거야. 감사 :) – BabbevDan

관련 문제