Kommunikation "normaler PC" mit lokaler Software an "Cloud Service" und umgekehrt

internet

Top Contributor
Hallo,

ich habe eine Frage wie so etwas funktionieren kann?

Angenommen, ich habe:
  • Eine Webapp, die lokal auf meinem Rechner läuft (bspw. localhost:8080/myapp).
  • Nun möchte ich mit einer Remote Software diese App ansteuern. Bpsw. einen Parameter verändern oder ähnliches.

Das heißt: die lokale App kommuniziert mit derm Server (Cloud Service).
Aber wie kommuniziert der Server (Cloud Service) mit der lokalen App?

Also ich kann mir aktuell nur vorstellen, dass die lokale App ständig Anfragen gegen die Cloud Server macht (Poll) und dann so von den Änderungen mitbekommt.
Oder woher weiß der Cloud Service IP etc. von meinem lokalen PC?

Vielen Dank.
 

internet

Top Contributor
ah, danke.

Ich verwende JSF und hier gibt es Omnifaces, die Websockets anbieten:

Nur wie sieht das dann in der Theorie genau aus?
- Ich sage in der Cloud - WebApp "Starte Session"
-> Was genau passiert dann?

Wie muss das konfiguriert sein?
 

KonradN

Super-Moderator
Mitarbeiter
Generell ist die Verbindung zurück vom Server zum "Client" (So nenne ich es mal) so nicht wirklich abbildbar, denn vom Netzwerk ist es meist nicht möglich, hier eine direkte Verbindung aufzubauen. (z.B. weil der Client hinter einem NAT Router steckt, wobei da oft auch Firewalls und Proxies eine Rolle spielen können)

Daher bleibt tatsächlich nur als Möglichkeiten:
a) Du baust einen Kanal auf, der in beide Richtungen geht. Das wäre mit die perfekte Lösung und WebSockets bieten sich da durchaus an (wie von @Jw456 richtig bemerkt).
b) Das "Polling" ist ansonsten aber auch nicht unüblich in vielen Fällen. Die Frage ist einfach, wie wichtig eine Information ist und wie schnell darauf reagiert werden muss.

Das findet man dann teilweise auch in deutlich komplexeren Strukturen, die sowas implementieren. So gibt es MQ (Message Queuing) Lösungen: Da wird dann eine Nachricht in den Pool gestellt und ist dann bereit für Clients zum abholen. Da werden dann gewisse Dinge sicher gestellt a.la. Nachrichten gehen nicht verloren, es kann n:m Beziehungen geben (N-Server stellen Nachrichten ein und m Clients können diese abholen.) u.s.w.
Je nachdem, was Du brauchst, kann man auch in dem Bereich weiter recherchieren.
 

KonradN

Super-Moderator
Mitarbeiter
ah, danke.

Ich verwende JSF und hier gibt es Omnifaces, die Websockets anbieten:

Nur wie sieht das dann in der Theorie genau aus?
- Ich sage in der Cloud - WebApp "Starte Session"
-> Was genau passiert dann?

Wie muss das konfiguriert sein?
Deine Cloud stellt den WebSocket zur Verfügung. Die lokale Web Applikation verbindet sich dann. Die Verbindung geht also weiter von Deiner lokalen App aus (die ja hinter einem Proxy, NAT Router, Firewall, was auch immer sein kann).

Evtl. hilft zum Verständnis eine Erläuterung von WebSockets, damit klar wird, was da passiert?
 

internet

Top Contributor
klar, Polling würde funktionieren - wäre aber eher nur die Notoption.

Prinzipiell geht es darum, dass ich ein Gerät habe (mein Client), auf der eine Web App Software läuft. Nun würde ich aber gerne von außerhalb die Möglichkeit haben das Gerät (nicht auf OS - Ebene (sonst wäre Teamviewer etc. auch ausreichen), sondern nur die Webapp) zu steuern.

Das heißt:
-> Es wird eine Verbindung aufgebaut.

Die connectMe.jsf - Seite auf dem Server hat dann u.a. den Omnifaces Code:
Java:
<o:socket channel="someChannel" user="#{myBean.deviceId}" ... />
deviceId wird ja als Parameter geholt.

Auf dem Cloud Server kann ich ja Nachrichten dann schicken:
Code:
@Inject @Push
private PushContext someChannel;

public void sendMessage(Object message, User recipientUser) {
    Long recipientUserId = recipientUser.getId();
    someChannel.send(message, recipientUserId);
}

Aber wie sende & empfange ich dann vom Client Nachrichten zurück an den Server?
Was muss hier von Omnifaces eingebaut werden? Die Implementierung auf den lokalen WebApp ist mir dann nicht ganz klar.
 

internet

Top Contributor
also wie gesagt so ganz klar ist das mir nicht, wie die lokale Web App die Nachrichten empfängt / sendet bzw. diese dann weiterverarbeitet.
Senden kann ich mir noch vorstellen via an einen Webservice von der Cloud App zu senden.

- Ich erhalte eine Nachricht vom Websocket der Cloud App zurück. Das heißt die lokale Web App ist auf der Seite gerade drauf: https://mycloudcmpany.com/connectMe.jsf?deviceId=123456789

Aber wie kann ich nun eine Methode in der lokalen Web App starten.
Also ich muss ja nun irgendwie eine Verknüpfung in die lokale Web App bekommen? Wie soll das gehen?
 

LimDul

Top Contributor
Lies dir nochmal alles zum Thema websockets durch. Das ist eine bidrektionale Kommunikation.

Das ist einfach eine Verbindung die nicht - wie beim normalen HTTP Aufruf - direkt danach geschlossen wird, sondern einfach dauerhaft offen ist.
 

internet

Top Contributor
Ja, ist ja quasi wie ein Chat.
Ich sehe aber das Problem, dass ich mit zwei unterschiedlichen Applikationen kommunizieren muss, wobei:
  • Die lokale Web App einfachen Zugriff auf die WebApp in der Cloud hat
  • Die Cloud App aber keinen direkten Zugriff auf die lokale Web App hat.

Einen Websocket via Omnifaces herzustellen habe ich oben probiert aufzuzeigen.
Das Problem ist aber nun für mich, wie ich die Nachrichten, die die lokale WebApp empfängt weiter verarbeite, sodass eine Funktion etc. in der lokalen WebApp gestartet wird.
Vereinfacht gesagt kann ich ja nicht von der Cloud WebApp bpsw. ein bestimmtes Programm auf dem lokalen Client öffnen. Oder wie geht das?

Bspw. ist die lokale Web App dann auf der Seite connected und können miteinander kommunizieren.
https://mycloudcmpany.com/connectMe.jsf?deviceId=123456789

Dort ist ja dann sowas implementiert, wie der Code unten... Die lokale WebApp empfängt dann Nachrichten.
Java:
<o:socket channel="someChannel" onmessage="socketListener" />

Jetzt will ich aber, dass eine Funktion in der lokalen WebApp ausgeführt wird.
Wenn ich nun via "actionListener" eine Funktion aufrufe, dann läuft die doch in der Applikation von der Cloud App.
 

KonradN

Super-Moderator
Mitarbeiter
Das ist auch nur ein Beispiel.
Ich will hier ein JSON Objekt entgegen nehmen und dann irgendwas verrücktes machen
Dann mach das doch! Wo ist das Problem? Du bekommst Text-Nachrichten. Darin kann beliebiges stehen. Du kannst Daten in eine beliebige Textform bringen. Und heya - JSON ist ein Format, das in solch einer Textform daher kommt!

Dann musst Du mal ggf. prüfen: Kommen Nachrichten 1:1 an oder ist es wie bei Sockets / deren Streams, dass da alles einfach aneinander gehängt und dann in beliebigen Paketgrößen versendet wird. Ggf. ist das ein zusätzlicher Aufwand, der aber auch nicht sonderlich komplex ist.
 

KonradN

Super-Moderator
Mitarbeiter
Welche maven dependency nimmt man denn standardmäßig? Wirklich diese Eclipse Tyrus?
Was nutzt du denn sonst noch an Abhängigkeiten? Evtl. hat das Framework, das Du nutzt, schon eine Implementation - dann würde ich schlicht bei der bleiben. Die API ist in JSR 356 festgelegt und es gibt viele Implementationen. Tyrus ist wohl die Referenz Implementation. Aber wenn Du z.B. auf Tomcat setzt, dann solltest Du auch die Implementation von Tomcat nutzen (IMHO).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
izoards Socket Kommunikation Java Basics - Anfänger-Themen 16
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
A Client-Server Kommunikation Java Basics - Anfänger-Themen 3
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
F Klassen Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 4
M Input/Output Kommunikation mit externen Geräten Java Basics - Anfänger-Themen 0
M OOP Kommunikation MVC und DTO Java Basics - Anfänger-Themen 13
K Kommunikation von Java RMI und Webservices Java Basics - Anfänger-Themen 9
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
E MVC: Kommunikation der Modellteile Java Basics - Anfänger-Themen 12
G Klassen Kommunikation zw. Klassen Java Basics - Anfänger-Themen 28
B Socket Kommunikation in beide Richtungen Java Basics - Anfänger-Themen 12
F Socket Kommunikation Java Basics - Anfänger-Themen 4
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
G Kommunikation zwischen zwei Klassen Java Basics - Anfänger-Themen 5
J Panel-übergreifende Kommunikation Java Basics - Anfänger-Themen 3
P Kommunikation zwischen zwei *.class Java Basics - Anfänger-Themen 3
J RxTx/RS232 Kommunikation (TwoWay) Java Basics - Anfänger-Themen 10
Z Tomcat Server Kommunikation zu Client Applet Java Basics - Anfänger-Themen 5
G Datenstruktur und die Kommunikation mit der GUI Java Basics - Anfänger-Themen 10
W Inter-Thread-Kommunikation Java Basics - Anfänger-Themen 3
M Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
T Kommunikation zwischen Controller und GUI Java Basics - Anfänger-Themen 2
S Frage zur Kommunikation zwischen Objekten Java Basics - Anfänger-Themen 5
J Kommunikation zwischen zwei JAVA-Dateien Java Basics - Anfänger-Themen 8
T Kommunikation zw. 2 Javaprogrammen Aufr --> Verab. -> Java Basics - Anfänger-Themen 6
P Kommunikation mit Prozess Java Basics - Anfänger-Themen 3
H Kommunikation C++ <> Java Java Basics - Anfänger-Themen 4
A Kommunikation Java-Anwendung <-> Java-Applet Java Basics - Anfänger-Themen 24
V Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 2
S Kommunikation zwischen Komponenten in einem JFrame Java Basics - Anfänger-Themen 10
D Thread und Process Kommunikation bei eigener Console Java Basics - Anfänger-Themen 2
P asynchrone Kommunikation Applet Servlet mit RMI möglich Java Basics - Anfänger-Themen 4
B Kommunikation zwischen Klasse und Listener Java Basics - Anfänger-Themen 2
F Kommunikation von 2 Klasse Java Basics - Anfänger-Themen 5
L Kommunikation zwischen mehreren Klassen Java Basics - Anfänger-Themen 2
B jtapi <-> tapi Kommunikation Java Basics - Anfänger-Themen 2
D Kommunikation zwischen zwei Java Anwendungen möglich? Java Basics - Anfänger-Themen 6
S Kommunikation zwsichen Klassen. Java Basics - Anfänger-Themen 9
D J/Direct oder JNI? .bzw. Kommunikation mit Windows-API. Java Basics - Anfänger-Themen 2
G Nochmal Problem mit Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
G Kommunikation zwischen Klassen, aber bitte MVC Java Basics - Anfänger-Themen 12
G Kommunikation zwischen Applet und Java-Anwendung über TCP/IP Java Basics - Anfänger-Themen 3
M Kommunikation zwischen GUI und Event -Klasse Java Basics - Anfänger-Themen 3
M probleme in der kommunikation von klassen Java Basics - Anfänger-Themen 5
Q Kommunikation zwischen Frames Java Basics - Anfänger-Themen 3
I @Inject in normaler Klasse? Java Basics - Anfänger-Themen 4
S ArrayList zu normaler List Java Basics - Anfänger-Themen 3
L Code verhält sich in JUnit anders als in normaler Klasse Java Basics - Anfänger-Themen 2
B normaler Array Java Basics - Anfänger-Themen 9
H Dienst beenden als normaler User Java Basics - Anfänger-Themen 3
M Applet lokaler Festplattenzugriff Java Basics - Anfänger-Themen 25
J Lokaler Bilder Cache für Applet Java Basics - Anfänger-Themen 4
H Verwendung lokaler Einstellungen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben