【发布时间】:2016-12-01 10:08:38
【问题描述】:
我正在处理 node.js HTTPS 请求。我已经做了足够的研究并检查了所有东西,但我仍然认为我遗漏了一些东西。 我想要实现的是,当有人向我的 URL 发送 HTTPS GET 请求时,我必须向他们发送一个文件作为响应,以便他们可以下载。一切正常,我已经实现了“FS”、“HTTPS”,并且它也以正确的方式写入,但是当我在每 1000 个请求后在我的 URL 上发送大量流量时,平均有 40 个请求失败。
我不知道为什么会这样,我也设置了这个:
var https = require('https');
https.globalAgent.maxSockets = Infinity;
谁能帮我理解和解决问题? 提前致谢!
Anvesh
编辑:根据要求,我正在添加我的代码,出于隐私考虑,我删除了几行代码。
var https = require('https');
https.globalAgent.maxSockets = Infinity;
//var port = process.env.port || 1337;
fileSystem = require('fs'),
fileToWriteLog = require('fs'),
path = require('path');
var mime = require('mime');
var cors = require('cors');
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var express = require('express'),
app = module.exports.app = express();
app.use(cors());
// Created to use HTTPS
var options = {
pfx: fileSystem.readFileSync('Certificate/key.pfx'),
passphrase: 'XXX'
};
var server = https.createServer(options,app);
var io = require('socket.io').listen(server); //pass a https.Server instance
var port = 8080;
console.log(process.env.PORT);
server.listen(port,"0.0.0.0", function () {
console.log("Secure Express server listening on port " + port);
}); //listen on port 8082
// routing
app.get('/stream/:patam1/:param2', function (request, response) {
var patam1 = request.param("patam1");
var param2 = decodeURIComponent(request.param("param2"));
var filePath = "XXXX" + param2;
console.log(filePath);
var stat = fileSystem.statSync(filePath);
response.writeHead(200, {
'Content-Type': 'XXX',
'Content-Length': stat.size
});
var readStream = fileSystem.createReadStream(filePath);
readStream.on('data', function (data) {
var flushed = response.write(data);
// Pause the read stream when the write stream gets saturated
if (!flushed)
readStream.pause();
});
response.on('drain', function () {
// Resume the read stream when the write stream gets hungry
readStream.resume();
});
// readStream.on('end', function () {
// response.end();
// });
});
【问题讨论】:
-
你如何发送这 1000 个请求?您的服务器如何处理它们?请给我们更多信息。
-
我准备了一次发送 1000 个请求的 windows exe 程序,而我的服务器受到所有这 1000 个请求的巨大影响。但这就是我们想要的,我们想要一次处理数百万个请求。服务器比较简单,有 HTTPS、fs 模块。它服务于 HTTPS GET 请求。
-
在您的 Windows 应用程序和您的服务器之间有几个队列,如果它们不能对 1000 个请求进行排队,它们可能无法正常运行。我们需要查看更多代码,以确定是您的应用程序还是您的测试方法存在缺陷。
-
@David:我已经添加了我的代码,请帮忙。
标签: javascript node.js https