Javascript 使用请求或节点中的指针时发生套接字挂起错误
我在尝试连接到外部网站时遇到套接字挂起错误,下面给出了一个失败网站的示例。代码适用于其他站点,如果我用Python重写代码,我可以成功访问测试站点。我无法对外部站点进行更改,因此我希望增强NodeJS脚本以处理连接。谢谢你的帮助Javascript 使用请求或节点中的指针时发生套接字挂起错误,javascript,node.js,request,needle.js,Javascript,Node.js,Request,Needle.js,我在尝试连接到外部网站时遇到套接字挂起错误,下面给出了一个失败网站的示例。代码适用于其他站点,如果我用Python重写代码,我可以成功访问测试站点。我无法对外部站点进行更改,因此我希望增强NodeJS脚本以处理连接。谢谢你的帮助 let request = require("request-promise"); let needle = require("needle"); //Check if can connect to site let arrTestCases = ["htt
let request = require("request-promise");
let needle = require("needle");
//Check if can connect to site
let arrTestCases = ["https://compassandstars.com"];
for (x in arrTestCases) {
chkcon(arrTestCases[x])
}
async function chkcon(req) {
let resultJSON = {};
let data;
try {
console.log ("Validating blog " + req);
//Attempt using RequestPromise, fails with same error
// let getURL = await request({
// url: req,
// headers: {
// 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
// }
//// headers: {
//// 'User-Agent': 'ouruseragent',
//// 'Connection': 'keep-alive'
//// }
// })
needle('get', req)
.then(function(response) {
resultJSON = {ValidURL: true};
console.log("URL Validated successfully", response.body);
})
.catch(function(err) {
console.log(err);
})
} catch (e) {
console.log("Bad Blog URL ",e.message);
} finally {
console.log("Result: " + JSON.stringify(resultJSON), req);
}
错误响应:
Result: {} https://compassandstars.com
{ Error: socket hang up
at TLSSocket.onConnectEnd (_tls_wrap.js:1073:19)
at Object.onceWrapper (events.js:219:13)
at TLSSocket.emit (events.js:132:15)
at endReadableNT (_stream_readable.js:1101:12)
at process._tickCallback (internal/process/next_tick.js:152:19)
code: 'ECONNRESET',
path: null,
host: 'compassandstars.com',
port: 443,
localAddress: undefined }
我可以在AWS Lambda上使用NodeJS 8.10重新创建问题,在我的机器上使用NodeJS 9.6.1重新创建问题
我的研究表明,找到一个兼容的密码来建立SSL连接可能是一个错误,但我无法找到如何强制请求更改请求来处理这个问题 lambda上的套接字挂起通常表示lambda超时或内存不足Hi Bryan,为了确认lambda没有超时,它有60秒的超时时间并返回正常。该问题也可以在本地重新创建(即不通过AWS运行或lambda仅从我自己的机器执行),因此不特定于AWS/lambda.Eh。它可能表明连接的另一端存在问题,但由于它在python中可靠地工作,因此它肯定是您这边的问题。我很少看到这些问题,但它几乎总是达到lambda/node的极限。太多的同时连接,太多的内存被使用,诸如此类的事情。当您即将突破限制时,Lambda将切断您的连接,此时您会看到此错误感谢Bryan,感谢您的反馈-在这种情况下,我可以100%确认它与Lambda无关,因为在本地执行时,它没有以任何方式使用Lambda-直接通过节点。也似乎与连接的数量无关,因为它只是一个连接,经过几天的尝试,100%的时间都失败了。也没有可见的内存问题。那就没办法了。不熟悉针。奇怪的是,其他请求在节点中可靠地工作,而此请求在python中可靠地工作,然后此特定请求在节点中可靠地失败。这个错误的主要原因是您的请求已发出,但由于某种原因无法正确接收响应。这是一条糟糕的错误消息。lambda上的套接字挂起通常表示lambda超时或内存不足Hi Bryan,为了确认lambda没有超时,它有60秒的超时时间,并且返回正常。该问题也可以在本地重新创建(即不通过AWS运行或lambda仅从我自己的机器执行),因此不特定于AWS/lambda.Eh。它可能表明连接的另一端存在问题,但由于它在python中可靠地工作,因此它肯定是您这边的问题。我很少看到这些问题,但它几乎总是达到lambda/node的极限。太多的同时连接,太多的内存被使用,诸如此类的事情。当您即将突破限制时,Lambda将切断您的连接,此时您会看到此错误感谢Bryan,感谢您的反馈-在这种情况下,我可以100%确认它与Lambda无关,因为在本地执行时,它没有以任何方式使用Lambda-直接通过节点。也似乎与连接的数量无关,因为它只是一个连接,经过几天的尝试,100%的时间都失败了。也没有可见的内存问题。那就没办法了。不熟悉针。奇怪的是,其他请求在节点中可靠地工作,而此请求在python中可靠地工作,然后此特定请求在节点中可靠地失败。这个错误的主要原因是您的请求已发出,但由于某种原因无法正确接收响应。这是一条糟糕的错误消息。