Về cơ bản tôi muốn tạo một máy chủ vững chắc.Việc cần làm khi ServerSocket ném IOException và giữ máy chủ chạy
while (keepRunning.get()) {
try {
Socket clientSocket = serverSocket.accept();
... spawn a new thread to handle the client ...
} catch (IOException e) {
e.printStackTrace();
// NOW WHAT?
}
}
Trong khối IOException, phải làm gì? Ổ cắm máy chủ có lỗi nên nó cần được tạo lại không? Ví dụ: chờ một vài giây và sau đó
serverSocket = ServerSocketFactory.getDefault().createServerSocket(MY_PORT);
Tuy nhiên nếu ổ cắm máy chủ vẫn OK, thì thật đáng tiếc khi đóng và hủy tất cả các kết nối đã được chấp nhận trước đó vẫn đang giao tiếp.
EDIT: Sau một số câu trả lời, ở đây nỗ lực của tôi để đối phó với IOException. Việc triển khai sẽ đảm bảo việc duy trì máy chủ và chỉ tạo lại socket máy chủ khi cần thiết?
while (keepRunning.get()) {
try {
Socket clientSocket = serverSocket.accept();
... spawn a new thread to handle the client ...
bindExceptionCounter = 0;
} catch (IOException e) {
e.printStackTrace();
recreateServerSocket();
}
}
private void recreateServerSocket() {
while (keepRunning) {
try {
logger.info("Try to re-create Server Socket");
ServerSocket socket = ServerSocketFactory.getDefault().createServerSocket(RateTableServer.RATE_EVENT_SERVER_PORT);
// No exception thrown, then use the new socket.
serverSocket = socket;
break;
} catch (BindException e) {
logger.info("BindException indicates that the server socket is still good.", e);
bindExceptionCounter++;
if (bindExceptionCounter < 5) {
break;
}
} catch (IOException e) {
logger.warn("Problem to re-create Server Socket", e);
e.printStackTrace();
try {
Thread.sleep(30000);
} catch (InterruptedException ie) {
logger.warn(ie);
}
}
}
}
Nếu tạo một ổ cắm máy chủ mới, không thành công với BindException - điều này có nghĩa là 100% chắc chắn rằng ổ cắm máy chủ cũ hoàn toàn OK? – s5804
Tôi không thể nói "có" cho chắc chắn, nhưng nói chung tôi sẽ giả định điều đó. Tôi cũng sẽ sử dụng một chiến lược phòng thủ. Ví dụ. nếu bạn nhận được số X thất bại gọi điện thoại chấp nhận, sau đó bạn có thể xem xét các ổ cắm máy chủ bằng cách nào đó bị hỏng, và chọn để đóng các ổ cắm máy chủ. – mdma