Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js HTTP服务器停止侦听_Node.js - Fatal编程技术网

Node.js HTTP服务器停止侦听

Node.js HTTP服务器停止侦听,node.js,Node.js,我在端口1338上设置了HTTP服务器,以便在IP上侦听服务器。当我第一次启动Node时,这工作得很好,但由于某些原因,我遇到了服务器随机停止侦听的问题。我已经检查了Forever从我的应用程序收集的日志,包括任何未捕获的异常。自启动以来,日志中未显示任何错误 我的问题有两个方面。什么会导致服务器以随机间隔停止侦听?还有,应该在节点中运行什么检查,以便我可以注销导致侦听器停止的错误 下面是我的HTTP服务器的代码 http.createServer(function (req, res) {

我在端口1338上设置了HTTP服务器,以便在IP上侦听服务器。当我第一次启动Node时,这工作得很好,但由于某些原因,我遇到了服务器随机停止侦听的问题。我已经检查了Forever从我的应用程序收集的日志,包括任何未捕获的异常。自启动以来,日志中未显示任何错误

我的问题有两个方面。什么会导致服务器以随机间隔停止侦听?还有,应该在节点中运行什么检查,以便我可以注销导致侦听器停止的错误

下面是我的HTTP服务器的代码

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的处理。