# Client Server Protokoll



## Frichts (30. Dez 2004)

Hallo,
wie dem Thema entnommen werden kann, bin ich dabei ein Client / Server Modell zu entwickeln.
Der Server ist soweit auch schon im Betrieb. Jetzt habe ich ein paar Fragen.

Alle Clients die sich mit dem Server Verbinden werden an ein Thread weitergereicht und dort findet dann der Datenaustausch statt. Jetzt zu meiner Frage, wie kann ich die Befehle und Daten vom Server zum Client weriterreichen, und ungekehrt? Ich habe daran gedacht, das ich mir eine Protokoll Klasse schreibe. Ich bin mir aber nicht sicher, ob dies der richtige weg ist. Wie wird dies in euren Anwenungen gehandhabt? 

Ist es überhaupt sinnvoll jeden Client in einem Thread weiterzuverarbeiten? Letztendlich werden von dem Server auch pro Client Datenbank abfragen durchgeführt. Führt das evtl zu Problemen? Angenommen, die Datenbank ist für 20 gleichzeitige Verbindungen ausgelegt, und an meinem Server sind 30 Benutzer angemeldet, die Zeitgleich auf die Datenbank zugreifen möchten, so führt die zu Engpässen. ?!

Könnt ihr mir ein paar gute Tutorials empfehlen, die sich mit der Client Server Entwicklung beschäftigen?


----------



## meez (30. Dez 2004)

Entwickle ein eigenes Protokoll, oder nimm halt eins, was schone existiert...(http, ftp)...

Beim Server würd ich nicht für jeden Client einen eigenen Thread öffnen, sondern alle Request in eine Queue stellen, und  diese mit ein paar Worker-Threads abarbeiten...Diese Methode ist um einiges Skalierbarer.....


----------



## Bleiglanz (31. Dez 2004)

Frichts hat gesagt.:
			
		

> Hallo,
> wie dem Thema entnommen werden kann, bin ich dabei ein Client / Server Modell zu entwickeln.
> Der Server ist soweit auch schon im Betrieb. Jetzt habe ich ein paar Fragen.


Welcher Server? Was ist das - ein Printserver? Oder hat das was mit CORBA COM+ RMI zu tun? Wenn die Schnittstelle für die Clients schon feststeht, dann erübrigt sich doch die weitere Debatte?


> Alle Clients die sich mit dem Server Verbinden werden an ein Thread weitergereicht und dort findet dann der Datenaustausch statt.


Datenaustausch womit? einer DB? Wird bei jeder Anfrage ein neuer Thread erzeugt? Zustandslose Clients??


> Jetzt zu meiner Frage, wie kann ich die Befehle und Daten vom Server zum Client weriterreichen, und ungekehrt? Ich habe daran gedacht, das ich mir eine Protokoll Klasse schreibe. Ich bin mir aber nicht sicher, ob dies der richtige weg ist. Wie wird dies in euren Anwenungen gehandhabt?


einfach: RMI, hat Java alles fest eingebaut und ist sehr stabil

schwierig: CORBA, kann dafür auch C++ Clients bedienen

neu: Webservices

gut, aber oft Overkill: nimm einen J2EE Applicationserver

dämlich: selbst Sockets verwalten und die Daten serialisieren (hangestricktes Marshalling)

noch dämlicher: auf http oder ähnliches aufsetzen und die Daten selbst serialisieren



> Ist es überhaupt sinnvoll jeden Client in einem Thread weiterzuverarbeiten?


muss so sein, sonst kann ja immer nur ein Client "gleichzeitig" bedient werden, diese Idee kannste
in der Praxis abhaken



> Letztendlich werden von dem Server auch pro Client Datenbank abfragen durchgeführt. Führt das evtl zu Problemen?


ja

Stichwort: Zustandsbehafteter Client, lang laufende Transaktionen, Offline-Concurrency



> Angenommen, die Datenbank ist für 20 gleichzeitige Verbindungen ausgelegt, und an meinem Server sind 30 Benutzer angemeldet, die Zeitgleich auf die Datenbank zugreifen möchten, so führt die zu Engpässen. ?!


ja, der Server muss einen Connection-Pool verwenden - dann hat man wenigstens TimeOuts und schnellere Verbindungen (der Aufbau einer DB-Verbindung ist relativ aufwändig)



> Könnt ihr mir ein paar gute Tutorials empfehlen, die sich mit der Client Server Entwicklung beschäftigen?


fällt mir so pauschal nichts ein, ist eben schwierig und hängt von den Anforderungen ab


----------



## Frichts (2. Jan 2005)

Hallo,
ich möchte noch einige Dinge dazu erwähnen. Meine Aufgabe ist es, ein Client Server Modell zu entwickeln. 
Die Aufgabe die mir gestellt worden ist:

Ein System welches Kundendaten verwaltet, diese Kunden erhalten Rechnungen, können Leistungen buchen, stehen auf Wartelisten - ich habe mich vorher schon Informiert, für diesen Bereich gibt es keine wirklich ausgereifte Software.
Deshalb habe ich mich der Sache angenommen.

Ich habe mich für ein Client Server Modell entschieden, um die Daten, Zugriffe, ... Zentral zu Pflegen. Da auch automatisiert auf Ereignisse reagiert werden soll (Mails , SMS versenden). 
Hinter dem Server arbeitet eine mySQL Datenbank - dort werden die Benutzer und Gruppen sowie die Profile hinterlegt.

Ihr habt ja schon einiges genannt - ich möchte gern wissen, ob ich auf dem richtigen Weg bin. Vielleicht kann man dieses Problem ja wesentlich leichter lösen - ich bin eben neu auf dem Gebiet.

Meine Vorstellung, an der ich z.Zt. arbeite ist Server mit folgenden Eigenschaften

- Verwaltung von Benutzer, Gruppen
- Verwaltung der max. Verbindungen
- Verwaltung der max. Verbindungen (DB)
- Log (Konsole, File, DB)

- autom. Prozesse (Mails generieren, PDF erstellen, etc)


Es werden sicher im laufe der Zeit noch einiges an Anforderungen mit hinzukommen.
Für mich stellt sich die Frage, wie ich einen Strukturierten austausch der Daten (die aus der DB) zum Client übertrage und umgekehrt. Es ist sicherlich ein eigenes Protokoll dafür notwendig. 
Gibt einfachere und bewehrte Möglichkeiten solche Daten auszutauschen?


----------



## Bleiglanz (3. Jan 2005)

> Für mich stellt sich die Frage, wie ich einen Strukturierten austausch der Daten (die aus der DB) zum Client übertrage und umgekehrt. Es ist sicherlich ein eigenes Protokoll dafür notwendig.


das ist dafür sicher NICHT notwendig!

a) verwende Java-RMI (wenn alle Clients Java-basiert sind), dann kannst du beim Client ganz normale Java-Methodenaufrufe verwenden

oder

b) implementiere die Schnittstellen als Webservices, das ist am flexibelsten - allerdings mit leichter Performance-Strafe



> Ihr habt ja schon einiges genannt - ich möchte gern wissen, ob ich auf dem richtigen Weg bin. Vielleicht kann man dieses Problem ja wesentlich leichter lösen - ich bin eben neu auf dem Gebiet.


ich will dir ja nicht die gute Laune verderben, aber so wie du das beschreibst, bist du vielleicht besser dran, wenn du dich 2-3 Monate lang in J2EE und EJBs einarbeitest

du müsstest ja von Hand

- die Nebenläufigkeit steuern (gleichzeitiger Zugriff der Clients)

- deinen Connection Pool verwalten

- Transaktionssteuerung

- entfernte Zugriffe (Protokolle?) 

- uvm. 

implementieren, das ist sehr viel harte Arbeit, die dir von den Anbietern von J2EE Application-Servern schon abgenommen wurde (es gibt auch Open Source: Jonas, JBoss, ...)

Aber: wenn du keine Ahnung von J2EE hast UND dein Projekt hinreichend klein ist -> dann lass die Finger davon


----------

