我遇到了节点/快速服务器的一种非常奇怪的行为。有时,大约有五分之一的页面加载,它会随机拒绝提供页面请求的一个或另一个静态文件。
浏览器失败并显示消息" [错误]无法加载资源:请求超时。"同时,快递认为根本没有要求(见下面代码中的评论)。
我已经简化了代码,以至于我不知道还有什么要评论,而且它仍然在做。生成的页面需要来自/ js的4个js文件和来自/ img的大约30个图片。所有静态文件的总大小约为2MB。这些文件中的任何一个(或几个)都可能丢失。这可能与加载和/或内存泄漏无关,因为它发生在没有用户重启后的服务器上。
这是在数字海洋液滴上运行,512MB内存和Ubuntu上的MEAN库存。没有例外。
process.on('uncaughtException', function (e) {
console.log(new Date().toString(), e.stack || e);
process.exit(1);
});
var http = require('http'),
https = require('https'),
fs = require('fs'),
express = require('express'),
path = require('path'),
pagemaker=require('./app/pagemaker').pagemaker;
var privateKey = fs.readFileSync(path.join(__dirname, 'ssl/server.key'), 'utf8');
var certificate = fs.readFileSync(path.join(__dirname, 'ssl/server.crt'), 'utf8');
var intcert1 = fs.readFileSync(path.join(__dirname, 'ssl/comdom.crt'), 'utf8');
var intcert2 = fs.readFileSync(path.join(__dirname, 'ssl/comtrust.crt'), 'utf8');
var credentials = {key: privateKey, cert: certificate, ca:[intcert1, intcert2]};
var app = express();
app.set('views', path.join(__dirname, 'app/views'));
app.set('view engine', 'jade');
////////////////////////////////////////////////////////////////////////////////////
// if the browser reports some file as missing, it is also missing in the output of this function!
app.use(function(req, res, next) {
console.log(req.protocol+'://' + req.headers.host + req.originalUrl);
next();
});
////////////////////////////////////////////////////////////////////////////////////
app.use('/img',express.static(path.join(__dirname, 'public/img'), {maxAge: 86400000}));
app.use('/js',express.static(path.join(__dirname, 'public/js'), {maxAge: 86400000}));
app.get('/', function(req, res) {
var page=pagemaker('index', 'pt');
res.set('Content-Type','text/html; charset=UTF-8');
res.send(200, page);
});
app.use(function (req,res) {
res.render('404', {url:req.url});
});
https.globalAgent.maxSockets = 999;
https.createServer(credentials, app).listen(9877, function(){
console.log('SSL Express server listening on port 9877');
});
答案 0 :(得分:1)
这显然是由数字海洋数据中心的问题引起的,与我的行为无关。
我通过对不同数据中心的两个相同的新水滴进行围攻来诊断这一点。两者都处于运行示例MEAN应用程序的默认配置中。阿姆斯特丹的那个(我的原始水滴在那里)有同样的问题,在伦敦的那个工作得非常好。
当我准备提交一张票时,鬼鬼祟祟的混蛋修了一些东西,现在问题就消失了。
花了我3天的时间。谢谢,DO!