2013-02-21 24 views
7

Tôi kết nối với các trang web khác trong ứng dụng node.js của mình bằng mô-đun yêu cầu theo cách rất chuẩn:Ứng dụng Node.js bắt đầu tính thời gian (ETIMEDOUT) khi HTTP kết nối với các trang web khác sau khi đã chạy một thời gian

Network.prototype.httpRequest = function(url, method, params, headers, callback) 
{ 
    var qs = typeof params === 'string' ? params : querystring.stringify(params || {}), 
     config = { 
      'method': (method || 'get').toUpperCase(), 
      'url': url, 
      'timeout': this.app.api.settings.http.timeout_outbound 
     }; 
    if(config.method === 'GET') 
    { 
     config.url += '?' + qs; 
    } 
    else 
    { 
     config.body = qs; 
    } 

    request(config, callback); 
}; 

Sau một vài giờ ứng dụng của tôi đang hoạt động, chức năng này bắt đầu định thời gian - và không chỉ cho một trang web. Nó bắt đầu không kết nối (ETIMEDOUT) một cách ngẫu nhiên, mà không có bất kỳ mô hình rõ ràng nào.

Dự đoán đầu tiên, rõ ràng của tôi là có điều gì đó phải chặn/can thiệp vào kết nối mạng. Có rất nhiều "bộ phận chuyển động" khác trong ứng dụng của tôi (ví dụ, kết nối với Mongo qua Mongoose, kết nối với ElasticSearch thông qua Elastical, vv), vì vậy có thể hiểu rằng một trong số đó là nguyên nhân ... nhưng rõ ràng là không thực sự là một tùy chọn ngồi xung quanh chọn lọc vô hiệu hóa các mô-đun khác và chờ 6 giờ để xem sự cố có biến mất hay không ...

Tôi đang giám sát lưu lượng mạng (qua iStatMenus pro trên OSX, FWIW) và không thấy bất kỳ điều gì bất thường/lưu lượng truy cập liên tục đến từ nút.

Có cách nào khác để nghiên cứu kỹ những gì có thể đang chặn/can thiệp vào lưu lượng truy cập của tôi không?

+1

bạn đã giải quyết vấn đề đó chưa? Tôi có cùng một vấn đề ... – hereandnow78

+1

Tôi cũng quan tâm đến giải pháp ... – rshmelev

+1

Tôi cũng có cùng một vấn đề. Bạn có thể cho chúng tôi biết giải pháp nào đã sửa cho bạn? –

Trả lời

0

Bạn đã thử setting keep-alive là đúng? Có vẻ như kết nối đã hết thời gian chờ (vì bạn đã đặt hết thời gian chờ) khi không nhận được dữ liệu nào. Tôi chạy vào một vấn đề tương tự trong khi tạo ra một giải pháp máy chủ/khách hàng socket và đây là sửa chữa.

(cũng có thể tôi đã hiểu nhầm câu hỏi)

+2

Tôi rất coi trọng vấn đề này, vì ứng dụng hoạt động tốt trong vài giờ và không có gì thay đổi về các điều kiện đang chạy, ngoại trừ lượng thời gian đang chạy. Cụ thể hơn, câu hỏi đặt ra là: tại sao nó không nhận được dữ liệu? Đó chính là vấn đề. Nó không nên xảy ra, đặc biệt là không có bất kỳ sự đều đặn nào. –

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