2010-08-27 46 views
8

Tôi đang viết ứng dụng node.js cần nói chuyện với máy chủ. Nó thiết lập kết nối http với mã sau:Làm cách nào để đặt thời gian chờ cho các kết nối http của khách hàng trong node.js

var client = http.createClient(u.port, u.hostname, u.secure); 
client.on("error", function(exception) { 
    logger.error("error from client"); 
}); 
var request = client.request(method, u.path, headers); 

Tôi không thấy bất kỳ tùy chọn nào trong tài liệu node.js để đặt thời gian chờ trên kết nối và dường như được đặt thành 20 giây theo mặc định. Vấn đề tôi gặp phải là tôi có người dùng ở Trung Quốc trên mạng có vẻ chậm hoặc không ổn định, đôi khi có thời gian chờ kết nối với trung tâm dữ liệu của chúng tôi ở Hoa Kỳ. Tôi muốn tăng thời gian chờ lên 1 phút để xem có khắc phục được không.

Có cách nào để thực hiện điều đó trong node.js không?

+1

Câu trả lời đúng là tất cả trong câu hỏi trùng lặp này: http://stackoverflow.com/questions/6214902/how-to-set-a-timeout-on-a-http-request-in-node (đặc biệt là xem douwe's answer) – Sandman4

+0

Bản sao có thể có của [Cách đặt thời gian chờ trên http.request() trong Nút?] (https://stackoverflow.com/questions/6214902/how-to-set-a-timeout-on-a- http-request-in-node) –

Trả lời

4

Tôi nghĩ bạn có thể làm điều gì đó như:

request.connection.setTimeout(60000) 

request.connection trả về đối tượng net.Stream liên quan đến việc kết nối. và net.Stream có phương thức setTimeout.

+0

Không hoạt động. Tôi cũng thấy có một phương thức client.setTimeout(), nó cũng không hoạt động. Tôi nghĩ rằng đây là thời gian chờ cho lưu lượng truy cập trên kết nối, không phải để thiết lập kết nối. –

+0

Phải. Được rồi ... Tôi sẽ có một cái lưới khác thông qua một số mã. Có thể có giá trị kiểm tra như thế nào/nếu một số các khuôn khổ nút xử lý này. –

+0

Cảm ơn đã giải quyết vấn đề proxy WebSocket cho tôi;) Các kết nối đã chết sau một phút hoặc lâu hơn. –

6

Hãy thử

request.socket.setTimeout (60000); // 60 sec

+1

Đó là câu trả lời đúng với cạnh nút ít nhất ... https://github.com/ry/node/blob/master/lib/http.js#L774 – Quickredfox

1

Bạn phải đợi kết nối ổ cắm máy khách được thiết lập trước, trước khi đặt thời gian chờ. Để thực hiện việc này, hãy thêm gọi lại cho sự kiện 'ổ cắm':

req.on('socket', function (socket) { 
    myTimeout = 500; // millis 
    socket.setTimeout(myTimeout); 
    socket.on('timeout', function() { 
     console.log("Timeout, aborting request") 
     req.abort(); 
    }); 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
    // error callback will receive a "socket hang up" on timeout 
}); 

See this answer.

1

Không có khả năng trong Nút để tăng kết nối hết thời gian chờ. Vì thường kết nối thời gian chờ (tức là kết nối thiết lập thời gian chờ) là cài đặt trên toàn hệ điều hành cho tất cả các ứng dụng (ví dụ: 21 giây in Windows, từ 20 đến 120 giây in Linux). Xem thêm Timouts in Request package.

Ngược lại, nút cho phép đặt thời gian chờ giảm và hủy kết nối ngay cả trong trường hợp kết nối chưa được thiết lập.

Thời gian chờ thêm (trong trường hợp kết nối đã được thiết lập) có thể được kiểm soát theo tài liệu (xem request.setTimeout, socket.setTimeout).

Các vấn đề liên quan