Client-Server-Programmierung
Markus
- webserver
0 Geistiger Hohlraum0 Ludger Keitlinghaus0 fk0 Markus
0 at0 markus
Hey zusammen,
hat jemand von Euch ne Idee bzgl. folgenden Sachverhalts.
Hab einen Server und einen Client (PDA). Auf dem Server läuft eine DB. Sobald etwas in eine DB-Tabelle eingetragen wird soll ein Prozess auf dem einem Prozess auf dem Client (PDA) Informationen diesbezgl. bereitstellen...
Das Problem hierbei ist, dass der Server-Prozess nicht von sich aus gestartet werden kann, er wartet ja auf eine Client-Anfrage!
Ein aktiver Server wäre notwendig.
Eine Möglichkeit hab ich schon in Erwägung gezogen: Den eigentlichen Server-Prozess auf dem PDA laufen lassen und den Client-Prozess auf dem Server... Dies ist allerdings auch irrelevant, da der DB-Server mehrere Clients bedienen können sollte...
Irgendjemand eine Idee ?!
Danke,
Markus
Hab einen Server und einen Client (PDA). Auf dem Server läuft eine DB. Sobald etwas in eine DB-Tabelle eingetragen wird soll ein Prozess auf dem einem Prozess auf dem Client (PDA) Informationen diesbezgl. bereitstellen...
"soll ein Prozess auf dem einem Prozess"? Kannst Du das bitte nochmal genauer mit verständlicher Grammatik erklären? Du möchtest bei Änderungen an der Datenbank etwas auf den PDAs in Gang setzen?
Das Problem hierbei ist, dass der Server-Prozess nicht von sich aus gestartet werden kann, er wartet ja auf eine Client-Anfrage!
Serverprogramme haben die Eigenart, auf Anfragen zu warten, das ist schon beinahe so eine Art Naturgesetz. Oder die Frage nach dem Ei und der Henne.
Vorschlag: Richte den Server so ein, dass er mit Datenbankstart gestartet wird und auf Anfragen wartet. Clients können entweder eine dauerhafte Verbindung zum Server aufbauen oder beim Server ihre Adresse hinterlassen. Bei Änderungen schickt der Server über alle Verbindungen / an alle gemeldeten Adressen die gewünschten Daten.
Vorschlag: Richte den Server so ein, dass er mit Datenbankstart gestartet wird und auf Anfragen wartet. Clients können entweder eine dauerhafte Verbindung zum Server aufbauen oder beim Server ihre Adresse hinterlassen. Bei Änderungen schickt der Server über alle Verbindungen / an alle gemeldeten Adressen die gewünschten Daten.
das wär ja ne nette Idee, allerdings hab ich keine, dies umzusetzen!
Für eine weitere Hilfestellung wäre ich Dir dankbar...
Danke,
Markus
das wär ja ne nette Idee, allerdings hab ich keine, dies umzusetzen!
Für eine weitere Hilfestellung wäre ich Dir dankbar...
Wenn Du verraten würdest, woran es fehlt und was die Umgebungsvoraussetzungen sind? Im Moment würde ich Dir glatt raten, Deinen C-Compiler rauszukramen und die Anwendungen auf Server und PDA TCP-mäßig aufzubohren.
Wenn Du verraten würdest, woran es fehlt und was die Umgebungsvoraussetzungen sind? Im Moment würde ich Dir glatt raten, Deinen C-Compiler rauszukramen und die Anwendungen auf Server und PDA TCP-mäßig aufzubohren.
im moment ist noch nix umgesetzt...
Systemvoraussetzungen: Server -> Linux
Client -> Windows CE
Sprache -> Java (?)
geplant hab ich eben eine Verteilte Anwendung über Sockets... Dein Lösungsansatz hört sich ja sehr vielversprechend an, allerdings weiss ich nicht wie dies zu realisieren wäre...
Danke,
Markus
Systemvoraussetzungen: Server -> Linux
Client -> Windows CE
Sprache -> Java (?)
geplant hab ich eben eine Verteilte Anwendung über Sockets... Dein Lösungsansatz hört sich ja sehr vielversprechend an, allerdings weiss ich nicht wie dies zu realisieren wäre...
In diesem Fall würde ich empfehlen, dass Du Dich erstmal in die gewünschte Programmiersprache Java einliest. Bei Addison-Wesley gibt es das Buch "Handbuch der Java-Programmierung" von Guido Krüger, das er unter http://www.javabuch.de/ freundlicherweise auch zum Download bereit hält. In dem Buch werden auch Netzwerkfunktionen beschrieben.
Java hätte den Vorteil, dass Du Dich nur um eine Art des Netzwerkzugriffs kümmern musst. Eine Sprache wie C bietet im Kern "lediglich" Zugriff auf die Schnittstellen des Betriebssystems und die dürften sich bei Linux und Windows unterscheiden (wenn auch keine Galaxien dazwischen liegen).
Es gibt aber natürlich auch dafür Bücher. Echte Fachbuchhandlungen mit guter Auswahl sind leider rar gesäht, aber zumindest in Unistädten sollte es sowas geben (eine große Fachbuchhandlung erkennt man daran, dass für einen Themenbereich wie IT ein ganzes Stockwerk reserviert ist).
Amazon und Konsorten sind definitiv keine Hilfe, Du brauchst einen Laden, in dem Du die Bücher aus dem Regal nehmen, Dich hinsetzen und kurz anlesen kannst. Die Umschlagtexte erzählen in der Regel alles und nichts. Alternativ bieten sich auch Bibliotheken an, allerdings schwanken Qualität und Auswahl hier recht stark.
So wie ich das einschätze, ist das Thema (bzw. Dein Bedarf) zu komplex, um das hier in Gänze im Forum abzuarbeiten. Mit einem umfassenden Grundlagenbuch bist Du sicher besser aufgehoben.
nein nein... da hast mich falsch verstanden... Ich bin sowohl in Java als auch C kundig! Ich weiss nur noch nicht sicher, welche Sprache ich verwende! Meine Tendenz geht Richtung Java, da hier mSocket-Programmierung besser gekapselt ist und da das Erzeugen von Threads einfacher ist...
Ich wollte nur eine prinzipielle Struktur, wie Du Dir die Implementierung Deines Lösungsvorschlags vorstellst...
Gruß,
Markus
Ich wollte nur eine prinzipielle Struktur, wie Du Dir die Implementierung Deines Lösungsvorschlags vorstellst...
at hat es bereits ähnlich erklärt. Der Unterschied ist nur, dass er von Datenbankseite aus regelmäßig bei den PDAs anklopft (wobei ich mich frage, woher er weiß, an welcher Adresse die PDAs sind), ich hingegen von PDA-Seite aus nur einmalig bei der Datenbankseite die Nachricht "Bin da" hinterlasse (und beim Beenden natürlich ein "Bin weg"), so dass die Datenbankseite jederzeit weiß, an wen sie Updates schicken soll.
Sowohl auf Datenbankseite als auch auf PDA-Seite muss, solange Updates bearbeitet werden sollen, jeweils ein Prozess laufen. Auf Datenbankseite muss darüber hinaus ständig ein Prozess laufen, der auf Anmeldungen wartet.
Hi,
hat jemand von Euch ne Idee bzgl. folgenden Sachverhalts.
Hab einen Server und einen Client (PDA). Auf dem Server läuft eine DB. Sobald etwas in eine DB-Tabelle eingetragen wird soll ein Prozess auf dem einem Prozess auf dem Client (PDA) Informationen diesbezgl. bereitstellen...
das geht nicht mit HTTP(S), da muesstest Du mit einem anderen Protokoll kommen (TCP/IP). Es gibt fuer diesen Gebrauchsfall einige M$-Objekte.
Eine Möglichkeit hab ich schon in Erwägung gezogen: Den eigentlichen Server-Prozess auf dem PDA laufen lassen und den Client-Prozess auf dem Server... Dies ist allerdings auch irrelevant, da der DB-Server mehrere Clients bedienen können sollte...
Hoert sich doch inhaltlich gar nicht so schlecht an. Auf den PDAs laeuft iregendetwas und diese melden sich regelmaessig beim Server. Allerdings bleiben die PDAs Clients, wuerde ich sagen. ;-)
Gruss,
Ludger
Hoert sich doch inhaltlich gar nicht so schlecht an. Auf den PDAs laeuft iregendetwas und diese melden sich regelmaessig beim Server. Allerdings bleiben die PDAs Clients, wuerde ich sagen. ;-)
kommt deswegen nicht in Frage, da eine schnelle Benachrichtugung an den PDA erfolgen sollte... zu viele zyklische Anfragen belasten mir das Netz zu sehr...
Danke,
Markus
kommt deswegen nicht in Frage, da eine schnelle Benachrichtugung an den PDA erfolgen sollte... zu viele zyklische Anfragen belasten mir das Netz zu sehr...
wie schnell denn? wieviel wird das netz belastet? (mega-oder gigabytes). oder vielleicht der server?
Hab einen Server und einen Client (PDA). Auf dem Server läuft eine DB. Sobald etwas in eine DB-Tabelle eingetragen wird soll ein Prozess auf dem einem Prozess auf dem Client (PDA) Informationen diesbezgl. bereitstellen...
Das Problem hierbei ist, dass der Server-Prozess nicht von sich aus gestartet werden kann, er wartet ja auf eine Client-Anfrage!
Ein aktiver Server wäre notwendig.
was oft gemacht wird:
ist 'server-push', wobei der server die neuen informationen an den client schickt.
bedingung hierbei ist, daß die verbindung noch aktiv ist, und nicht nach dem senden geschlossen wird.
nachteil:
jeder client belegt einen slot. und von diesen gibts ja oft nicht so viele.
wenn du haber nur eine kleine anzahl von clients hast, wäre dies eine möglichkeit.
alternativ ist ein client-pull, also ein normaler request doch auch eine lösung, wenn der client sich regelmäßig beim server meldet.
was oft gemacht wird:
ist 'server-push', wobei der server die neuen informationen an den client schickt.
alternativ ist ein client-pull, also ein normaler request doch auch eine lösung, wenn der client sich regelmäßig beim server meldet.
falls es keine andere Lösungen gibt, wird wohl nix anderes übrig bleiben... allerdings wäre mir eine effizientere Lösung lieber...
Gruß,
Markus
Hallo.
Aha, nächster Alauf.
Das Problem hierbei ist, dass der Server-Prozess nicht von sich aus gestartet werden kann, er wartet ja auf eine Client-Anfrage!
Ein aktiver Server wäre notwendig.
Oder regelmäßige Anfragen, die das Netz nicht belasten. Dazu ließe sich ein Client auf dem Server-Rechner installieren, der regelmäßig anfragt. Die Antwort geht dann zurück an den Client und falls sie positiv ausfällt, wird eine Verbindung zu einem Pico auf dem PDA aufgebaut un der wiederum veranlasst, die Daten vom Server zu holen -- wenn der Client auf dem Server-Rechner sie nicht gleich schickt. Da der Pico ja ansonsten nicht angesprochen wird, kann jede Anfrage an ihn ja nur bedeuten, dass neue Daten auf dem Server liegen, weshalb man den Start oder Refresh des PDA-Clients von einer Reaktion des Pico abhängig machen könnte.
Eine Möglichkeit hab ich schon in Erwägung gezogen: Den eigentlichen Server-Prozess auf dem PDA laufen lassen und den Client-Prozess auf dem Server... Dies ist allerdings auch irrelevant, da der DB-Server mehrere Clients bedienen können sollte...
Weshalb sollte das irrelevant sein? Jedem PDA sein Pico. Die Adressen kannst du ja auf dem Server oder auf dem Client auf dem Server-Rechner hinterlegen.
MfG, at
hey,
vielen Dank für Deine Antwort... diesmal habs auch ich gecheckt...
diese hilft mir auf jedenfall weiter!
Gruß,
Markus.