2016-09-24 4 views
3

Ich entwickle eine Java API für eine Addrroid App im Frühling. Im Moment ist meine API 100% REST und statuslos. Damit der Client Daten empfängt, muss er zuerst eine Anfrage senden.REST Server zu Client Kommunikation

Allerdings, was ich brauche, ist der Server, um Daten an den Client/nicht der Client an den Server fisrt/senden, wenn es mit seiner Aufgabe fertig ist.

Ich denke, dass eine Art von Sitzung zwischen den beiden Parteien erstellt werden muss.

Meine Frage ist: Wie kann ich diese Funktionalität des SERVER erreichen, der Daten an den KUNDEN sendet, wenn er mit seiner Aufgabe fertig ist?/Es ist nicht bekannt, wie lange die Aufgabe dauert./

Welche Art von API sollte ich für diesen Zweck entwickeln?

Eine idiotische Problemumgehung sendet eine Anfrage an den Server alle n Sekunden, aber ich suche nach einem intelligenteren Ansatz.

+1

Würde die Umstellung auf eine Web-Sockets-Kommunikation funktionieren? Auf diese Weise können Sie asynchron kommunizieren – mvlupan

+0

Danke, ich werde es sofort überprüfen – BabbevDan

+0

Eine andere Option ist JMS Themen zu verwenden, und der Server eine Nachricht zu dem Thema platzieren, wenn die Daten bereit sind, würde der Client auf das Thema hören, Wenn der Client eine Nachricht zu diesem Thema erhält, ruft der Client den Dienst des Servers auf, um die Daten abzurufen. ref: http://docs.oracle.com/javaee/6/tutorial/doc/bncdq.html – mangotang

Antwort

3

Es sind mehrere Optionen verfügbar. Sie können wählen, was am besten zu Ihnen passt.

  1. Http Long Polling - In diesem hält Server die Anfrage, bis sie mit ihrer Aufgabe fertig ist (in Ihrem Fall). Hier müssen Sie nicht alle paar Sekunden mehrere Anfragen stellen (Was ist Http Polling).

  2. Server gesendete Ereignisse - In diesem sendet der Server das Update an den Client ohne lange Polling. Es ist ein standardisierter Teil von HTML 5 - https://www.w3.org/TR/eventsource/

  3. Websockets - Nun, Websockets arbeiten im Duplex-Modus und in diesem wird eine dauerhafte TCP-Verbindung hergestellt. Sobald die TCP-Verbindung hergestellt ist, senden sowohl der Server als auch der Client Daten hin und her. Unterstützt von den meisten modernen Browsern. Sie können nach Android Websocket-Bibliothek wie autobahn und Java-Websocket suchen.

  4. SockJs - Ich würde empfehlen, mit dieser Option statt einfach WebSocket gehen. http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#websocket-fallback-sockjs-enable

+0

Danke! Ich denke, ich werde WebSockets verwenden, aber wird [this] (https://spring.io/guides/gs/messaging-stomp-websocket/) mit Andorid arbeiten? – BabbevDan

+0

Mit Android arbeiten? Dies ist ein serverseitiger Code. Sie müssen den Endpunkt Ihres Servers als WebSocket-Endpunkte angeben und androide Websocket-Bibliotheken verwenden, um eine Verbindung zum Server herzustellen und mit diesem zu interagieren. – Mansoor

+0

Okay, ich werde es herausfinden. Vielen Dank :) – BabbevDan

Verwandte Themen