1

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

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

下面是我的 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);
4

1 回答 1

2

你不处理pathname不等于时的情况/healthcheck/ticket。没有其他分支。

因此,当您的服务器被其他 url 调用时/healthcheck/ticket,它永远不会关闭res流,因为res.end()它从未被调用过。

一段时间后,您的服务器耗尽(网络)资源,因此似乎挂起(即,它不再对新请求作出反应)。

解决方案很简单:提供一个 else 分支,然后调用res.end()它,一切都应该没问题。

于 2013-07-25T18:31:31.073 回答