# Kommunikations - Optimierung



## Philipp84 (18. Aug 2006)

Hi!

Ich würde gerne meine Socket-Anwendung optimieren, was die Kommunikation von Client und Server angeht.
Folgende Ausgangssituation:

1 Server
2 Clients

Die Clients connecten sich zum Server und warten auf eingehende Nachrichten von diesem.
Der Server arbeitet threadbasiert.

Speziell geht es mir jetzt um die Frage, wie genau ich herausfinde, ob für den Client eine neue Nachricht anliegt.
Bisher habe ich es so gelöst:


```
while( true )
		{
			if( DATA_IN.available() != 0 )
			{ MyTranslator.translate( DATA_IN.readLine() ); }
			
			// in bestimmtem Zeitabstand wiederholen
			Thread.sleep( 500 );
		}
```

Das funktioniert an sich auch. Allerdings habe ich das Problem, dass Nachrichten dadurch erst verzögert ankommen - eben durch den vorgegebenen Zeitabstand. Außerdem ist das ganze auch alles andere als ressourcenschonend.

Welche anderen Möglichkeiten fallen Euch dazu ein? :meld:


----------



## foobar (20. Aug 2006)

Also die read-Methode des Inputstreams sollte eigentlich blocken, bis Daten vorhanden sind. Daher kannst du dir die Endlosschleife sparen.


----------



## Philipp84 (20. Aug 2006)

kapier ich nicht - wieso sparen? :shock: 
es soll doch eben eine endlosschleife sein, die ständig fragt, ob daten anliegen... so lange, wie das programm halt läuft.
ein abfragethread sozusagen.

natürlich blockt die read-methode aber das bringt mir doch nichts?
bevor ich was einlese muss ich ja erstmal gucken, ob auch was anliegt - sonst brauch ich nichts einzulesen.

was ich allesdings machen werde ist folgendes:

wie gehabt abfragen, ob daten anliegen. falls ja: so lange einlesen, wie daten vorhanden sind. dadurch werde auch mehrere nachrichten nacheinander direkt eingelesen und es dürfte auch keine verzögerung mehr geben.


----------



## njoerd (22. Aug 2006)

Warum fragst du dan nach ob daten anliegen?

wie gesagt die read Methode blockiert doch eh von selber brauchst ja nur die read Methode in eine while schleife starten also z.B. so:


```
while(true){
    MyTranslator.translate( DATA_IN.readLine() );
}
```

und read Liest nur was wenn was kommt, d.h. es wartet bis was kommt und liest das ein


----------



## Philipp84 (23. Aug 2006)

ach so meinst du das!
oke, habs verstanden 

danke für die erklärung!


----------

