Informationsverteilung an Programme auf verschiedenen PC´s

son gohan

Erfahrenes Mitglied
Hallo,

wie würdet ihr das lösen?

ich stehe vor folgender Aufgabe, ich habe das Programm "A", es ist eine Software die unter Windows läuft und installiert ist auf mein PC.

Das gleiche Programm ist auch auf PC´s von vielen anderen Leuten installiert und mein Programm soll Informationen an alle anderen Programme senden können.

Was mir klar ist, das ich das Internet benutzen muss weil die PC´s alle nicht miteinander verbunden sind wie ein Intranet.

Ich dachte auch eine SQL Datenbank sollte man vielleicht benutzen die dann jeweils abgefragt wird von allen Programmen, aber weis nicht ob sowas optimal ist, wenn jedes Programm z.b. jede Sekunde eine Abfrage startet um zu schauen ob was neues passiert ist.

Oder über Email dachte ich, dann würde jedes Programm erst bei Erhalt der neuen Email aktiv, aber um zu erkennen ob eine neue Email angekommen ist müsste man doch auch wieder mindestens jede Sekunde irgendwie eine Abfrage machen oder wie kann man sowas programmierteschnisch sonst erkennen?

Es scheint mir irgendwie einfach alles etwas zu CPU raubend zu sein.
 
Hallo!

Das Programm muss Daten senden und empfangen können, sollte aber ja klar sein. ;)

Möglichkeit 1: peer2peer, also der direkte Kontakt zwischen den Rechnern.
Vorteilhaft wäre hier DynDNS.
Nachteil: was ist wenn ein Rechner grad nicht erreichbar ist, z.B. weil die Internetverbindung getrennt wurde?

Darum würde ich zu Möglichkeit 2 tendieren (in groben Zügen erklärt):
Irgendwo steht ein zentraler Server.
An diesen kann Programm "A" seine Daten senden und zwischenspeichern.
Die anderen Programme senden bei ihrer Interneteinwahl ihre IP an den Server.
Somit weiss der Server "ich kann senden".
Der Server guckt bei sich nach ob von Programm "A" etwas gekommen ist und sendet es dann an die anderen Programme.
Bei Erfolg macht der Server einen Vermerk um nicht unnötig oft an die anderen Programme zu senden.

Gruss Dr Dau
 
Hallo Dr Dau!

wegen den zweiten Vorschlag von dir wollt ich was fragen:

Als zentralen Server wollt ich ein Windows VPS Server benutzen der ist die ganze Zeit online und wird von ein Webhoster überwacht.
Auf diesem Windows VPS Server würde ich dann eine PostgreSQL Datenbank installieren, die ist kostenlos und Leistungsfähig.
Das wäre doch eine Zentrale Server Lösung oder?


Wenn der Zentrale Server somit bereit steht frage ich mich noch wie ich alle 5-10 min neue Informationen versenden kann, die auch bei den anderen Programmen ankommen, wenn die aber nur einmallig bei Interneteinwahl eine Anfrage an den Server senden funktionirt es nicht. Also müssen die anderen Programme doch wieder öfter eine Anfrage senden, weil sonst bekommen sie wohl von neuen Änderungen nichts mit oder?
 
Hi,
ich glaube er meinte, dass nicht die Programme fragen ob es was neues gibt, sondern der Server ihnen mitteilt, dass er was neues hat und sie damit versorgen möchte.

mfg.Fide
 
Ich weiss nicht ob es PostgreSQL auch für Windows gibt, sollte sich aber schnell rausfinden lassen. ;)

Wie gesagt, in groben Zügen erklärt. ;)
Die Klienten könnten dem Server ja eine "Antwort" schicken, wenn dieser ihnen Daten schickt.
Bleibt die Antwort aus, dann sind sie wohl nicht erreichbar. ;)
So bräuchten die Klienten dem Server jedenfalls nicht unnötig (z.B. im Minutentakt) mitteilen "hallo, ich bin noch da".

Edith sagt:
Die Klienten könnten bei der Anwort, neben der IP, auch eine eindeutige Identifikation (z.B. Benutzernamen) mitsenden.
So kann der Server kontrollieren ob die gesendeten Daten auch wirklich den richtigen Klienten erreicht haben.
 
Zuletzt bearbeitet:
Die Idee ist aufjedenfall gut von dir, das schwirte mir auch mal im kopf, so kann man unnötiges Rumfragen nach neuen Daten verhindern, aber ich bin am überlegen wie ich die Programme vom Server aus informieren kann, normalerweise sind die Programme so gebaut das sie von sich aus Anfragen stellen und andersrum wirds kompliziert.
 
Ich habe zwar keine Ahnung vom programmieren, aber ich würde sagen dass die Klienten lediglich auch eine (minimalistische) Serverfunktion implementiert haben müssen.
Der "echte" Server spielt in dem Augenblick einen Klienten.
 
Die Idee ist aufjedenfall gut von dir, das schwirte mir auch mal im kopf, so kann man unnötiges Rumfragen nach neuen Daten verhindern, aber ich bin am überlegen wie ich die Programme vom Server aus informieren kann, normalerweise sind die Programme so gebaut das sie von sich aus Anfragen stellen und andersrum wirds kompliziert.
Softwaretechnisch könnte man das durch ein Proxy-Objekt lösen, das die Clientseite der Server-Push-Funktionalität implementiert und empfangene Nachrichten vom Server ggf. zwischenspeichert. Das Programm kann dann in beliebigen Abständen Anfragen an dieses Proxy-Objekt stellen und die Nachrichten „abholen“. Dadurch kann das restliche Programm weiter pull-basiert ablaufen.
 
Ich würde das ganze mittels XML-RPC oder SOAP lösen. Das HTTP Protokoll wird ja wahrscheinlich eh verwendet und somit kann man dann entsprechend die Requests senden und auf einen Response warten. Somit können die Programme auch mit unterschiedlichen Programmiersprachen entwickelt werden. Auf dem zentralen Server sollte dann neben der Datenbank ein entsprechendes "Server Programm" laufen, was die Kommunikation zur Datenbank übernimmt zwecks Sicherheit. Die Clients könnten sich dann beim Server an- und abmelden, so dass nur aktive Clients in seiner Online-Liste sind. Bei Timeouts etc. muss man sich überlegen, ob man es noch ein 2. mal probiert oder ob man den Client aus der Online-Liste wirft. Gibt genug Möglichkeiten.

Wichtig wäre, dass das Server-Programm alles korrekt steuert.
 
Da muss ich mir aufjedenfall noch etwas Gedanken zu machen, momentan bin ich noch am experementieren um die Programme Daten in eine SQL Tabelle schreiben zu lassen, danach hoffe ich etwas neues gelernt zu haben und einer Lösung noch näher zu kommen.
 

Neue Beiträge

Zurück