This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Asynchrone Servercalls via HTTPConnection

Allgemeine Fragen zur Entwicklung von und mit JVx.

Asynchrone Servercalls via HTTPConnection

Postby javac » Tue Oct 20, 2015 11:07 am

Ich habe eine Anwendung erstellt, die mit einer HttpConnection läuft. Ich möchte einen asynchronen Servercall ausführen, um eine zeitintensive Berechnung anzustoßen. Ich habe den Call aufgebaut wie hier im Forum beschrieben (Asynchrone Kommunikation mit CallBack).

Zum Problem: Leider wird der Callback erst nach einer sehr langen Zeit (> 30s) aufgerufen, sofern in der Zwischenzeit keine weiteren synchronen oder asynchronen Calls gesendet werden. Wird in der Zwischenzeit ein Call ausgeführt, so kommt die Rückantwort des letzten asynchronen Calls sofort.

Ist es möglich, dass dies in der Natur der HttpConnection liegt? Kann der Server nach einer Zeit ohne clientseitige Aktion senden, um den Callback auszulösen?

Kann ich einen Callback erwarten, trotzdem keine weitere Kommunikation nach dem Initiieren des asynchronen Calls stattfindet?
javac
 
Posts: 7
Joined: Wed Jun 17, 2015 11:22 am

Re: Asynchrone Servercalls via HTTPConnection

Postby Support@SIB » Tue Oct 20, 2015 11:38 am

Die aktuelle JVx Kommunikation verwendet keine Websockets im klassischen Sinne. Zur Zeit der Entwicklung waren Websockets noch nicht fertig bzw. in den Applikationsservern verfügbar.

JVx hat auch kein klassisches long-polling.

JVx hat einen Alive Thread der zyklisch, alle 30 Sekunden mit dem Server kommuniziert. Das ist ein Mittel um serverseitig festzustellen ob der Client überhaupt noch aktiv ist. Zusätzlich zum Session Timeout wird server-seitig gecheckt ob die Applikation alive ist, um die Sessions zu verwerfen...

Es gibt also eine garantierte Kommunikation alle 30 Sekunden und die Kommunikation der Applikation selbst, sprich die calls.

Ein CallBack funktioniert so, das am Server der Aufruf in einem WorkerThread gestartet wird und wenn dieser fertig ist, wird das Ergebnis für den nächsten Call geparkt. Beim nächsten Call vom Client wird das Ergebnis dann mitgeschickt. Das ist also entweder beim nächsten Alive oder mit dem nächsten Call.

Sie können das alive interval aber jederzeit verändern, siehe MasterConnection

Das Verhalten trifft nur 100% auf die Verwendung einer HttpConnection zu. Wenn eine DirectServerConnection verwendet wird, dann kommen die CallBack results sofort am Client an. Natürlich macht eine DirectServerConnection nur während der Entwicklung Sinn um ohne Appserver zu entwickeln oder wenn ein Fat Client entwickelt werden soll. Bei einer 3 Tier Anwendung hilft DirectServerConnection natürlich nicht.

Sie verwenden vermutlich nicht das JVx Vaadin UI sondern Swing UI? Mit vaadin UI wäre push möglich.
User avatar
Support@SIB
 
Posts: 353
Joined: Mon Sep 28, 2009 1:56 pm

Re: Asynchrone Servercalls via HTTPConnection

Postby javac » Tue Oct 20, 2015 12:33 pm

Es ist richtig, dass ich das JVx Swing UI verwende. Ich denke die einfachste Lösung ist momentan das Keep-Alive Intervall herunterzusetzen.

Vielen Dank für die schnelle und hilfreiche Antwort!!
javac
 
Posts: 7
Joined: Wed Jun 17, 2015 11:22 am

Re: Asynchrone Servercalls via HTTPConnection

Postby Support@SIB » Tue Oct 20, 2015 1:13 pm

Eventuell nur für den Zeitraum des callbacks. Im Normalbetrieb muss das Alive nicht unnötig feuern.
User avatar
Support@SIB
 
Posts: 353
Joined: Mon Sep 28, 2009 1:56 pm


Return to Development (DE)