我在下面的代码中看到了一个奇怪的行为。
请求 req 成功时调用 cb1。之后还调用了 cb2 ,这似乎不对。
var result = {};
// populate options object
var req = https.request(options, function(response) { // cb1
callback(null, result);
});
req.on('error', function(err) { // cb2
callback(err, result);
});
req.setTimeout(30000); // 5 mins
req.setNoDelay(true);
if (requestBody) {
req.write(requestBody);
}
req.end();
如果 https 请求已经成功(在 cb1 中response.statuscode设置为 200),是否可以稍后在同一个请求对象上调用“错误”处理程序?
调用 cb2 函数
错误:读取 ECONNRESET
我的假设是这永远不会发生,因此“回调”有一些代码,如果为相同的传入请求调用两次,会导致我的服务器崩溃。
另外,我在 https 模块上使用了以下 2 个设置。
https.globalAgent.maxSockets = 65000;
https.globalAgent.keepAlive = true;
keepAlive 设置是否有可能以某种方式保持与后端服务器的连接处于活动状态,并且当服务器终止此连接时,在同一个 req 对象上再次调用 cb2 ?