while(true){
try{
Socket clientSocket = serverSocket.accept();
new Thread(new HandlerThread(clientSocket)).start;
}catch (IOException e){
System.out.println(this.getServerName()+"接收socket時發生異常");
e.printStackTrace();
}
}
服務器上可能發生一種拒絕服務攻擊(denial-of-service),如果為每個連接生成一個新線程,大量幾乎同時如站連接可能導致它生成極大數量的線程
Java虛擬機最終會耗盡內存而崩潰,更好的辦法是使用一個線程池來限制資源使用,50個線程應該過客,不論負載多大應該不會崩潰,可能會拒絕連接,但起碼不會崩潰
while(true){
try{
Socket clientSocket = serverSocket.accept();
executorService.execute(new HandlerThread(clientSocket));
}catch (IOException e){
System.out.println(this.getServerName()+"接收socket時發生異常");
e.printStackTrace();
}
}