2016-11-15 4 views
0

Ich habe eine einfache Java IO-TCP-Server/Client-Protoyp, wo der Server schwer auf den Client schreibt, und der Client schreibt gelegentlich auf den Server. Schreiben erfolgt eine while-Schleife, insbesondere im run() Verfahren eines Worker Gewinde, als Standard:Lesen und Schreiben Java-Socket ohne Blockierung

@Override 
public void run() { 
    while (true) { 
     // Server writes to client 
     try { 
      socket.getOutputStream.write(writeArray); 
     } catch (Exception e) { 
      System.exit(1); 
     } 
} 

Dies wird in einer While-Schleife, so dass, wenn ich auch eine Leseoperation enthalten, wäre es zu blockieren.

Gibt es ein Standardmuster für gelegentliche Lesevorgänge, ohne die CPU-Zyklen zu blockieren oder zu verschwenden?

+0

Sie können auf separaten Threads lesen und schreiben. – flakes

+0

Ja, darüber hatte ich auch nachgedacht. Auf der einen Seite mag ich nicht, Tonnen von Threads spawnen, wenn sie nicht kritisch sind, aber ich denke, es würde mir Lesezugriff geben, ohne den Schreib-Thread überhaupt zu beeinflussen. –

+0

Für kleine Datenmengen müssen Sie dies möglicherweise nicht tun, aber für stärkeren Datenverkehr können separate Threads sehr viel effizienter werden. – flakes

Antwort

1

Schauen Sie sich die verfügbare() Methode an: . Dann müssen Sie nur "falls verfügbar" lesen.

+0

Perfekt, danke. Ich denke, ich sollte die Dinge sorgfältiger lesen, dachte verfügbar() bedeutet, Socket ist verfügbar zum Lesen oder Schreiben, nicht nur zum Lesen. Danke –

+0

Froh ich könnte helfen .. Bitte markieren Sie dies als die Antwort, wenn es Ihr Problem löst. – Joe

+0

Ich muss 10 Minuten nach dem Posten warten, um eine Antwort zu akzeptieren;) –