Socket Dynamische Socket-Thread Erzeugung

  • Themenstarter Themenstarter DeBukkIt
  • Beginndatum Beginndatum
D

DeBukkIt

Gast
Guten Abend Java-Freunde,

Hintergrund:
Für ein Funkspiel würde ich gerne einen Socket-Server schreiben, der zu jedem Klienten in einem eigenen Thread die Verbindung hält und ggf. Daten an diesen senden kann.

Problem:
Wie erzeuge ich automatisch einen neuen Thread, sobald ein neuer Klient eine Verbindung anfragt? Die Anzahl der Threads darf nicht von vorne herein maximiert sein, sondern soll mit jeder Anfrage angepasst werden.


Vielen Dank im Voraus,
DeBukkIt
 
Hättest du die beiden Fragen nicht im selben Thread klären können?

Java:
while (true) {
  Socket socket = serverSocket.accept();
  ClientHandler handler = new ClientHandler(socket);
  new Thread(handler).start();
}
Wobei ClientHandler ein Runnable ist.
 
Thread pro Anfrage:
Java:
public class ThreadPerTaskServer {
	public static void main(String[] args) throws IOException {
		final int port = ...;
		final ServerSocket server = new ServerSocket(port);
		while (true) {
			final Socket client = server.accept();
			final Runnable task = new Runnable() {
				public void run() {
					handleRequest(client);
				}
			};
			new Thread(task).start();
		}
	}
}
Soll man aber nicht machen.

Besser:
Java:
public class TaskExecutionServer {
	public static void main(String[] args) throws IOException {
		final Executor executor = Executors.newCachedThreadPool();
		final int port = ...;
		final ServerSocket server = new ServerSocket(port);
		while (true) {
			final Socket client = server.accept();
			final Runnable task = new Runnable() {
				public void run() {
					handleRequest(client);
				}
			};
			executor.execute(task);
		}
	}
}

Oder man nutzt doch eine feste Anzahl an Threads per [JAPI]Executors#newFixedThreadPool(int)[/JAPI].
 

Zurück
Oben