Tôi đang tạo một máy chủ HTTP làm dự án cho lớp tôi đang tham gia và tôi đã cố gắng tìm giải pháp trong một tuần. Tôi có DataInputStream và tôi cần đợi khách hàng gửi cho tôi yêu cầu http, có thể mất vài giờ để điều này xảy ra do kết nối vẫn được mở. đây là mã của tôi
DataInputStream dis=DataInputStream mới(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
while(!socket.isClosed()){
try{
/**đợi cho đến khi có dữ liệu mới vào luồng, nếu kết nối không còn hoạt động thì hãy đóng nó*/
while(dis.available()==0){
if(còn sống==false){
socket.close();
phá vỡ;
}
}
/*tại thời điểm này luồng có dữ liệu mới hoặc thuộc tính còn sống đã được đặt thành sai */
if(!socket.isClosed()){
/*phân tích văn bản yêu cầu */
Yêu cầu yêu cầu=Yêu cầu mới(dis,this);
/*tạo phản hồi dựa trên yêu cầu*/
Phản hồi phản hồi=Phản hồi mới(yêu cầu,điều này);
/*gửi phản hồi lại cho client*/
phản hồi.send(dos);
/*ghi lại thông tin chi tiết về giao tiếp*/
Logger.log(toString(request,response,socket));
/*nếu yêu cầu có định dạng sai hoặc yêu cầu có tiêu đề Kết nối được đặt thành đóng, hãy đóng kết nối sau khi gửi phản hồi*/
if(request.isBadRequest() || !"keep-alive".equalsIgnoreCase(request.getHeader("Connection"))){
đóng();
}
}
} catch (IOException e) {
e.printStackTrace();
phá vỡ;
}
}
hiện hữuwhile(dis.available()==0)
Một phần, tôi đang đợi luồng lấy một số dữ liệu, nhưng vấn đề là nếu tôi có nhiều kết nối, máy chủ của tôi bắt đầu tốn nhiều thời gian CPU, do đó làm chậm máy tính của tôi, vì nó chỉ bị treo trong vòng lặp hết lần này đến lần khác, không tạo cơ hội cho CPU thực hiện lập kế hoạch tốt. Nếu dis.available() là một lệnh chặn thì mọi thứ sẽ hoàn hảo. Có giải pháp nào không?
Luồng đầu vào
đãChặn trong phương thức đọc khi không có dữ liệu.
Bạn không cần những thứ này available()
các cuộc gọi hoặc vòng lặp xung quanh chúng.
Bạn cũng nên lưu ý rằngỔ cắm.isClosed()
chỉ trongBạnChỉ trả về true khi socket được đóng lại. Nó không cho bên kia biết liệu kết nối đã bị đóng hay chưa.
Tôi là một lập trình viên xuất sắc, rất giỏi!