cuốn sách gpt4 ai đã làm

java - Chặn cho đến khi DataInputStream khả dụng

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 06:22:26 30 4
mua khóa gpt4 Nike

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?

câu trả lời hay nhất

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.

Về java - chặn cho đến khi DataInputStream khả dụng, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/27275163/

30 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress