2017-10-10 18 views
7

Tôi đã đọc tất cả các vấn đề liên quan về SO và GitHub về lỗi này và không có lỗi nào trong số chúng dường như giải quyết tình huống này.Node.js HTTP NHẬN “Lỗi ECONNRESET” khi đọc

Khi tôi chạy đoạn mã sau:

response = await axios.get('http://localhost:8082/panda, { 
    httpAgent: new http.Agent({ keepAlive: true, keepAliveMsecs: 10000 }) 
}); 

tôi nhận được lỗi sau:

{ Error: socket hang up 
    at createHangUpError (_http_client.js:345:15) 
    at Socket.socketOnEnd (_http_client.js:437:23) 
    at emitNone (events.js:110:20) 
    at Socket.emit (events.js:207:7) 
    at endReadableNT (_stream_readable.js:1059:12) 
    at _combinedTickCallback (internal/process/next_tick.js:138:11) 
    at process._tickCallback (internal/process/next_tick.js:180:9) code: 'ECONNRESET' } 
{ Error: read ECONNRESET 
    at _errnoException (util.js:1019:11) 
    at TCP.onread (net.js:608:25) 
    code: 'ECONNRESET', 
    errno: 'ECONNRESET', 
    syscall: 'read', 
    etc... 

Không có vết đống ngoài onread cuộc gọi do đó, nó không rõ ràng làm thế nào tôi có thể nhận được bất kỳ thông tin bổ sung ngoài mã lỗi ECONNRESET (-54) được chuyển đến phương thức onread trong net.js

Sự cố này xảy ra với mọi yêu cầu t - nó không liên tục.

Một vài quan sát:

  • khi đưa ra yêu cầu tương tự từ chrome hoặc Postman yêu cầu KHÔNG thất bại
  • cố gắng để tái tạo một yêu cầu thành công từ Chrome, bằng cách sử dụng các tiêu đề tương tự, không
  • đặt tiêu đề chấp nhận để sử dụng 'gzip', v.v. không trợ giúp - Tôi đã thử tất cả các đề xuất bao gồm một số gợi ý như đặt độ dài nội dung và thêm nội dung vào yêu cầu mặc dù đây là yêu cầu GET
    • lỗi luôn luôn xuất hiện trong net.js, nhưng xảy ra với cả yêu cầu và Axios thư viện

Đây là một phần thú vị - Tôi chỉ có thể dường như để tái tạo vấn đề này đáng tin cậy khi tôi lưu trữ máy chủ cục bộ. Tôi có thể tiếp cận với cá thể dev hoặc chạy máy chủ trong khu vực lang thang, thông qua một vùng chứa docker, không có vấn đề gì.

Tôi đang chạy macOS Sierra 10.12.6 nếu điều đó tạo ra bất kỳ sự khác biệt nào. Máy chủ được viết bằng Java và sử dụng khung công tác Spring. Đây là cấu hình RestTemplate Tôi đang sử dụng cho các cuộc gọi HTTP:

@Bean 
public RestTemplate restTemplate() { 
    //request timeout 
    int timeout = 5000; 

    //Connection Pooling factory with timeouts to prevent disastrous request responses 
    HttpComponentsClientHttpRequestFactory cf = new HttpComponentsClientHttpRequestFactory(); 
    cf.setReadTimeout(timeout); 
    cf.setConnectTimeout(timeout); 
    cf.setConnectionRequestTimeout(timeout); 

    return new RestTemplate(cf); 
} 

Tôi đã thử làm rối tung các cài đặt này mà không có may mắn.

Bất kỳ ý tưởng nào?

+0

'kết nối thiết lập lại' lỗi có thể chỉ ra rằng quá trình máy chủ đạt một vấn đề (ví dụ nó bị rơi). Bạn đã có một cái nhìn trong các bản ghi của bất kỳ quá trình máy chủ nó là bạn đang cố gắng gọi? –

+0

Tôi đã thử nghiệm điều này trong khi gỡ lỗi quá trình cục bộ - không có sự cố và không có gì trong nhật ký ... Tôi đã thử thêm một trình chặn để ghi lại các lỗi và cũng thay đổi các mức ghi nhật ký khác nhau trong tệp application.properties của mình - nó không giống như yêu cầu bao giờ đạt đến máy chủ – Jordan

+0

Phiên bản nào của nút, v.v ... bạn đang sử dụng? – Corvusoft

Trả lời

1

Đây là sự cố đã biết với NodeJS và đã được giải quyết. Vui lòng xem http.Agent: idle sockets throw unhandled ECONNRESET để biết chi tiết.

Cũng đảm bảo bạn đã kích hoạt thiết lập bảo mật đúng khi opening a port trên hệ điều hành MacOS

+0

Tôi thấy vấn đề đó, nhưng nếu điều này đã được khắc phục hơn một năm trước, tôi sẽ nghĩ rằng phiên bản mới nhất của nút 7 và 8 – Jordan

+0

vấn đề này xảy ra mà không có tường lửa trên – Jordan

+0

Ngoài sự tò mò, điều gì xảy ra khi bạn chạy ứng dụng dưới gốc? – Corvusoft

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