【问题标题】:RESTIFY: Error: socket hang up] code: 'ECONNRESET' on multiple requestsRESTIFY:错误:套接字挂断]代码:多个请求上的“ECONNRESET”
【发布时间】:2014-01-17 13:42:15
【问题描述】:

我正在实现一个节点应用程序,它会从 BigCommerce 中引入订单详细信息。 使用 Restify JsonClient 异步多次调用 BigCommerce API。

它对某些呼叫工作正常,但之后我给出错误:[Error: socket hang up] code: 'ECONNRESET', sslError: undefined, body: {}

我已经尝试通过设置agent=false 关闭套接字池,但它仍然给出同样的错误。

以下是调用 BigCommerce API 的代码

makeRequest = function (url, params, headers, orderDetails, cb) {
                var options = {
              headers: headers
              };

                var client = restify.createJsonClient({
                    url: url
                });

                client.get(options, function(err, req, res, obj) {
                    if(err){
                        console.log(err);
                        cb(err,obj);
                    } else if(obj != null) {
                        var result = obj;
                        if(orderDetails == null) {
                            cb(null,result);
                        } else {
                            cb(null, result , orderDetails);
                        }
                    }
                });
            };

我收到以下错误:

{ [Error: socket hang up] code: 'ECONNRESET', sslError: unde
fined, body: {} } Error: socket hang up
    at SecurePair.error (tls.js:993:23)
    at EncryptedStream.CryptoStream._done (tls.js:689:22)
    at CleartextStream.read [as _read] (tls.js:490:24)
    at CleartextStream.Readable.read (_stream_readable.js:320:10)
    at EncryptedStream.onCryptoStreamFinish (tls.js:301:47)
    at EncryptedStream.g (events.js:175:14)
    at EncryptedStream.EventEmitter.emit (events.js:117:20)
    at finishMaybe (_stream_writable.js:352:12)
    at endWritable (_stream_writable.js:359:3)
    at EncryptedStream.Writable.end (_stream_writable.js:337:5)
    at EncryptedStream.CryptoStream.end (tls.js:628:31)
    at Socket.onend (_stream_readable.js:483:10) 

为什么我会收到这样的错误?我该如何处理?

谢谢

【问题讨论】:

  • 您确定关闭连接的不是 BigCommerce API?

标签: node.js sockets restify econnreset


【解决方案1】:

我只是想确保您在正确的区域设置代理设置。

包括

“代理”:假

在您的选择中。 (您粘贴的代码中的选项中没有设置)

这里 cmets 中的每个 gfpacheco:https://github.com/restify/node-restify/issues/485

默认情况下,NodeJS 使用代理来保持 TCP 连接打开,因此您可以重用它。 问题是,如果服务器已关闭,或者它出于某种原因关闭了您的连接,您会收到 ECONNRESET 错误。

每次只需要在创建客户端时设置 agent: false 就关闭连接

我已经尝试过这个解决方案,它对我有用。

除此之外,

“secureOptions”:“constants.SSL_OP_NO_TLSv1_2”

这里发布的解决方案听起来可能是正确的路径,因为您收到 sslError

【讨论】:

    【解决方案2】:

    也许你遇到了这个问题https://github.com/joyent/node/issues/5360

    TL;DR:您可以尝试使用最新的节点版本并将 secureOptions: constants.SSL_OP_NO_TLSv1_2 添加到您的选项中。

    【讨论】:

      猜你喜欢
      • 2015-09-19
      • 2015-08-27
      • 1970-01-01
      • 2013-09-12
      • 2015-11-07
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多