Node.js HTTP服务器停止侦听
我在端口1338上设置了HTTP服务器,以便在IP上侦听服务器。当我第一次启动Node时,这工作得很好,但由于某些原因,我遇到了服务器随机停止侦听的问题。我已经检查了Forever从我的应用程序收集的日志,包括任何未捕获的异常。自启动以来,日志中未显示任何错误 我的问题有两个方面。什么会导致服务器以随机间隔停止侦听?还有,应该在节点中运行什么检查,以便我可以注销导致侦听器停止的错误 下面是我的HTTP服务器的代码Node.js HTTP服务器停止侦听,node.js,Node.js,我在端口1338上设置了HTTP服务器,以便在IP上侦听服务器。当我第一次启动Node时,这工作得很好,但由于某些原因,我遇到了服务器随机停止侦听的问题。我已经检查了Forever从我的应用程序收集的日志,包括任何未捕获的异常。自启动以来,日志中未显示任何错误 我的问题有两个方面。什么会导致服务器以随机间隔停止侦听?还有,应该在节点中运行什么检查,以便我可以注销导致侦听器停止的错误 下面是我的HTTP服务器的代码 http.createServer(function (req, res) {
http.createServer(function (req, res) {
var pathname = url.parse(req.url).pathname;
var query = url.parse(req.url, true).query;
var check;
var responseData = '';
if(pathname === '/healthcheck/ticket'){
check = new Date().getTime();
check = check - tickets.lastAction;
if(check < 30000){
responseData = "page ok";
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(responseData);
}
else{
check = check/1000;
responseData = 'Last action taken by the Ticket Generator was ' + check + ' seconds ago';
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(responseData);
}
}
else{
responseData = 'URL NOT FOUND!';
res.writeHead(404, {'Content-Type': 'text/plain'});
res.end(responseData);
}
}).listen(config.eng.port, config.eng.host);
http.createServer(函数(req,res){
var pathname=url.parse(req.url).pathname;
var query=url.parse(req.url,true).query;
var检查;
var responseData=“”;
如果(路径名=='/healthcheck/ticket'){
check=newdate().getTime();
check=check-tickets.lastAction;
如果(检查<30000){
responseData=“页面确定”;
res.writeHead(200,{'Content-Type':'text/plain'});
res.end(responseData);
}
否则{
检查=检查/1000;
responseData='票证生成器采取的最后一个操作是'+检查+'秒前';
res.writeHead(200,{'Content-Type':'text/plain'});
res.end(responseData);
}
}
否则{
responseData='URL未找到!';
res.writeHead(404,{'Content-Type':'text/plain'});
res.end(responseData);
}
}).listen(config.eng.port,config.eng.host);
当路径名
不等于/healthcheck/ticket
时,您不会处理这种情况。没有别的分支
因此,当您的服务器被其他URL调用,但/healthcheck/ticket
时,它永远不会关闭res
流,因为永远不会调用res.end()
一段时间后,您的服务器(网络)资源耗尽,因此似乎挂起(即,它不再对新请求作出反应)
解决方案很简单:提供一个else分支,并在其中调用
res.end()
,一切都应该正常。我很确定服务器根本不会随机停止侦听,但您必须找出是什么导致它停止。我尝试了您上面展示的代码,它似乎从未停止侦听(代码中没有任何内容表明它会停止侦听)。您是否尝试过将所有内容都记录到console.log中,并尝试在停止侦听之前找出最后一条指令是什么?另外(这可能是一个愚蠢的建议,但我不知道forever在我脑海中到底是如何工作的)你确定forever在重新启动时不会覆盖日志(以防它是由抛出的错误引起的)?我已经检查了forever,它只是附加日志。当然,今天还没有发生(有时需要几天),但我会用更多的控制台日志重新启动它,以显示每一步,并查看它在哪里消失。很抱歉,我确实有一个URL没有找到,我放在那里,但当我剪切一些公司不想显示的代码时,它被剪切了。现在更新代码以更好地反映对else的处理。