Javascript 如何在node.js服务器中处理对一个文件的多个请求
我尝试在node.js服务器中提供多个音频文件,但当多个客户端尝试访问时,服务器有时会失败。我该怎么补救呢Javascript 如何在node.js服务器中处理对一个文件的多个请求,javascript,node.js,express,server,Javascript,Node.js,Express,Server,我尝试在node.js服务器中提供多个音频文件,但当多个客户端尝试访问时,服务器有时会失败。我该怎么补救呢 express = require('express'); const http = require('http'); const path = require('path'); const fs = require('fs'); const app = express(); app.get('/', function (request, response) { let fpat
express = require('express');
const http = require('http');
const path = require('path');
const fs = require('fs');
const app = express();
app.get('/', function (request, response) {
let fpath = base_dir + filenames[getIndex(filenames.length)];
let filestream = fs.createReadStream(fpath);
var d = new Date();
filestream.on('open', function() {
let stats = fs.statSync(fpath);
let fileSizeInBytes = stats["size"];
response.writeHead(200, {
"Accept-Ranges": "bytes",
'Content-Type': 'audio/mpeg',
'Content-Length': fileSizeInBytes});
filestream.pipe(response);
});
})
app.listen(3000, function () {
console.log('Audio file provider listening on port 3000');
})
您正在使用的将阻止线程同时侦听传入连接。相反,您应该切换到异步版本
您已经在使用express,无需重新发明轮子
app.get('/', (req, res) => {
let fpath = base_dir + filenames[getIndex(filenames.length)]
let d = new Date()
fs.stat(fpath, (err, stats) => {
// Handle Error when trying to get file stats
// Respond with 500 Internal Server Error
if (err) {
console.log(err)
return res.sendStatus(500)
}
let {size} = stats
res.status(200)
res.setHeader('Accept-Ranges', 'bytes')
res.setHeader('Content-Type', 'audio/mpeg')
res.setHeader('Content-Length', size)
fs.createReadStream(fpath).pipe(res)
})
})
app.get('/', function (request, response) {
let fpath = base_dir + filenames[getIndex(filenames.length)];
response.sendFile(fpath, function(err) {
//Handle err if any
});
})