xLightweb-Client + AJAX-Server - geht das?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo!

Ich habe mich seit kurzem mit dem Thema xlightweb beschäftigt und versuche, eine asynchrone HTTP Connection zu einem Server aufzubauen, der die AJAX-Technologie benutzt.

Die Kommunikation verläuft über einen Browser so:
- Per POST werden Logindaten zum Server geschickt.
- Der Server liefert XML-Daten zurück, die der Client auswertet.
- Per AJAX liefert der Server aktuelle Informationen.

Dies soll nun ein Java-Programm übernehmen und die Informationen auslesen. Ich möchte dabei nicht alle 3 Sekunden den Server anfragen, da dies mächtig Transfer erzeugt, sondern warten, bis der Server neue Daten liefert.

Mit einer einfachen URL-Connection kann ich dies leider nicht realisieren. Deswegen habe ich nach einer Lösung gesucht und bin auf xlightweb gestoßen.

Mit dem folgenden Code möchte ich die Nachrichten handlen:
(Vorweg: Ich erhalte irgendwie nie eine Nachricht.)

Code:
HttpClient conn = new HttpClient();
IHttpResponseHandler responseHandler = new IHttpResponseHandler() {
			
    public void onException(IOException ex) throws IOException {
        System.out.println("Exception:");
        ex.printStackTrace();
    }

    @InvokeOn(InvokeOn.MESSAGE_RECEIVED)
    public void onResponse(IHttpResponse response) throws IOException {
				
        System.out.println("Response:");
        System.out.println(response.getStatus());
        System.out.println(response.getBlockingBody());
    }
};

Die Verbindung zum Server wird so aufgebaut:

Code:
try {
    IHttpRequest request = new PostRequest("http://server/page", formParams);
    // Hier werden schon XML-Daten zurück gegeben, leider ist das geblockt
    System.out.println(conn.call(request, responseHandler));

    // Wenn der Server Daten hat, sollen sie per GET abgeholt werden
    IHttpRequest request2 = new GetRequest("http://server/page");
    // der Response-Handler soll die Daten verarbeiten
    conn.send(request2, responseHandler);
}
catch (MalformedURLException e1) {
    e1.printStackTrace();
}
catch (IOException e1) {
    e1.printStackTrace();
}

Das Ergebnis:
Keine Exception, keine Antwort. Der Thread ist beendet. Gibt es eine Möglichkeit, dieses AJAX zu handlen? Die Requests und Posts, die der Browser sendet, habe ich mir schon angeschaut. 1x POST und dann folgen immer neue GETs, wenn der Server Daten liefert.

Ich wäre über Eure Hilfe sehr dankbar!

Gruß,
Enrico
 
G

Guest

Gast
Das ganze hört sich irgendwie nach COMET an. Wie verhält sich der Server?

In deiner Implementierung ist zu sehen, dass dein ResponseHandler erst dann aufgerufen wird, wenn die komplette ResponseMessage empfangen wurde. Falls der Server den Response streamed, sprich die Response Message nicht abschließt, wird dein ResponseHandler nie aufgerufen -> InvokeOn.Message. Für eine Analyse des Serververhalten könntest du InvokeOn.Header verwenden, und die über getNonBlockingBody() die empfangen response message (teile) ausgeben.
 
G

Guest

Gast
Hallo!

Danke für den Tipp! Wie der Server genau funktioniert, kann ich nicht sagen. Ich kann nur die Header analysieren, die ich empfange und mir daraus einen Schuh zusammen basteln. Der Server sendet XML, das JavaScript der Seite wertet diese Daten aus und passt dementsprechend die Seite an. Dieses Verhalten soll das Java-Programm nachimplementieren.

Ich habe mir nun auch das JavaScript angesehen und einen Timer entdeckt, der alle 2sek die Daten vom Server abruft und eine ID mitsendet, welche Daten er zuletzt empfangen hat. Den Timer habe ich nun mit einem extra Thread nachgebaut und sende ebenfalls alle 2sek die zuletzt empfangene ID. Ist natürlich viel Transfer, aber den erzeugt der Browser ja auch.

So funktioniert das jetzt auch erst einmal. Ich verwende zwar immer noch meine eigene kleine HttpClient Klasse, die ich mir damals geschrieben habe, aber das xlightweb Framework scheint sehr viel mehr leisten zu können. Momentan muss ich auch dem Server sagen, dass mein Client kein AJAX unterstützt, um XML-Daten zu bekommen (sonst erhalte ich eine HTML-Seite). Dies konnte xlightweb von allein lösen (mit gesetztem AJAX-Flag).

Gruß,
Enrico
 
G

Guest

Gast
xLightweb hat kein Wissen über AJAX, COMET oder ähnliches. D.h. xLightweb ist eine NetzwerkBibliothek für die Client- und Serverseitige HTTP-Programmierung. Hierbei wird synchrones/asynchrones bzw. blocking/non-blocking Programmiermodell unterstützt.

Auf der Clientseite ist xLightweb mit dem Apache HttpClient vergleichbar, wobei xLightweb eben auch ein asynchrones/non-blocking Programmiermodell unterstützt (und ein einfacherer Programmieransatz verfolgt?). Auf der Serverseite ist xLightweb mit Servletcontainer vergleichbar. Auf hier ist das Unterscheidungsmerkmal zu den Servletcontainer bzw. Servlet API, das auch ein asynchrones/non-blocking Programmiermodell unterstützt wird.

AJAX selbst ist kein Netzwerkprotokoll sonder ein Kommunikationsmuster. AJAX heißt lediglich, dass der Client/JavaScript asynchron zur Oberfläche im Hintergrund den Server aufruft.

Ohne Verständnis über das Client-Server-Protokoll (wer sagt „was“, „wann“, …) ist es ein sehr steiniger Weg einen Client zu schreiben. Du kommst an einer Analyse nicht vorbei.
 
G

Guest

Gast
Das habe ich mir auch schon gedacht, dass ich da tiefer forschen muss. Dass das JavaScript alle 2sek einen Request sendet, habe ich bereits heraus gefunden. (siehe vorheriger Post) Die Cookies handle ich bisher auch allein, das soll xlightweb jedoch in Zukunft machen.

Mein Verständnis für AJAX war ja demnach gleich 0. Dieses asynchrone Verhalten kann ich doch mit xlightweb realisieren, wenn ich das jetzt richtig aufgefasst habe. (?)

Es ist im Übrigen keine große Sache, die der Server da leistet. "Wer sagt was, wann?" - Die Frage hatte ich mir natürlich auch gestellt und dank des Firefox Add-Ins "Live HTTP headers" schnell heraus gefunden. Ein Blick über das JavaScript, dass die AJAX-Anfragen handelt, half ebenfalls.

Die Daten, die ich nun empfangen konnte, waren schnell analysiert, jedoch war es ja mein Problem, die Daten erst einmal zu bekommen. Ein SAX-Parser wandelt mir nun noch das XML in ein Document um (DocumentBuilderFactory) und damit war ich schnell an dem gewünschten Ziel.

Dass ich, wie gesagt, alle paar Sekunden einen Request senden muss, wollte ich eigentlich vermeiden, aber das lag ja an meinem mangelnden AJAX-Verständnis.

Danke noch einmal an den Gast / die Gäste, die mir hier geholfen haben!
Enrico
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
J Einlesen von Servernachrichten von TCP-Client Netzwerkprogrammierung 17
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
T Client zu Client Kommunikation Netzwerkprogrammierung 2
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
ruutaiokwu ständig "sender address rejected: improper use of smtp" bei smtp-client Netzwerkprogrammierung 4
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
A Chatserver/-client - Code stoppt bei readUTF() Netzwerkprogrammierung 7
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
L Zugriffprobleme Client - Webservice AspenTechnology Netzwerkprogrammierung 0
A Client Client Übertragung Netzwerkprogrammierung 12
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
K Socket Netty Client wirft Fehler! Netzwerkprogrammierung 3
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
U Socket Client mit hash authentifizieren Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
J Client - Serversocket Netzwerkprogrammierung 1
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
N Fragen zu Sockets Client Netzwerkprogrammierung 3
F Extasys TCp Client extends Funktion Netzwerkprogrammierung 0
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
A Socket Wie ein einfacher Multithreads Service mit Telnet als Client mit Observable/Observer gelöst.... Netzwerkprogrammierung 0
K C# Server - Android Client Netzwerkprogrammierung 0
T Application Client NullPointerExc Netzwerkprogrammierung 7
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
N FTP FTP Client invalid IPv6 address (Apache Commons Net API) Netzwerkprogrammierung 6
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
X RMI: Woher kennt der Client das Schnittstellen-Interface? Netzwerkprogrammierung 2
E Thematik Client server Netzwerkprogrammierung 2
D UDP Client empfängt nichts Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
N Client Identifikation eines Servers Netzwerkprogrammierung 1
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
D SSH Client Netzwerkprogrammierung 7
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
B TCP Client Android Netzwerkprogrammierung 3
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
OnDemand Ist Client noch angemeldet? Netzwerkprogrammierung 7
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
D Socket UDP Client reagiert nicht auf spontane Meldungen Netzwerkprogrammierung 5
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
J Client Server - Serialisierung Netzwerkprogrammierung 8
C Client connection per Portforwarding auf einen lokalen Serverport Netzwerkprogrammierung 3
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6

Ähnliche Java Themen


Oben