Ho un problema con l'utilizzo di ServerSocket
nella mia applicazione.Creazione del ServerSocket in un thread separato?
Sto creando il ServerSocket
nel costruttore della mia applicazione. Il costruttore del socket chiama il metodo accept()
per attendere la connessione di un client.
Il problema è che il metodo accept()
congela la mia intera applicazione fino a quando un client non si connette. Vorrei quindi chiedere se esiste un'alternativa alla creazione dell'intero ServerSocket
in un thread separato, che il costruttore del e il suo metodo accept()
viene chiamato accanto alla mia applicazione principale?
Edit:
Grazie a Olivier per il consiglio, ponendo l'Accetti in un eseguibile e la creazione di un pool di thread per gestire le clientconnections.
thats il mio codice in questo momento:
public void start(){
final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10);
Runnable serverTask = new Runnable() {
@Override
public void run() {
try {
serverSocket = new ServerSocket(port);
while (true) {
Socket clientSocket = serverSocket.accept();
objectout = new ObjectOutputStream(clientSocket.getOutputStream());
clientProcessingPool.submit(new ClientTask(clientSocket,objectout));
}
} catch (IOException e) {
System.err.println("Accept failed.");
}
}
};
Everythings funzionare benissimo! Grazie!
provato a spostare codice relativo socket in thread separato? qualsiasi problema specifico affrontato? – Ankit
Dai un'occhiata a java.nio.channels.AsynchronousServerSocketChannel e verifica se soddisfa i tuoi requisiti. – Crollster
O meglio ancora, dai un'occhiata a questa domanda: http://stackoverflow.com/questions/8940747/how-should-i-use-asynchronousserversocketchannel-for-accepting-connections – Crollster