Node.js零星的&ECONNREFUSED' request.get上的错误

时间:2016-02-01 22:04:11

标签: javascript mysql node.js loopbackjs nw.js

我的Node / loopback服务器偶尔出现问题。我的设置如下:

编辑:我的节点版本是v4.2.4,我在Windows 10 Professional上运行Node。

客户端:

  • 遍历本地文件系统的nw.js客户端,并计算文件的MD5值。

  • 使用request.post,客户端以'fileHash: d41d8cd98f00b204e9800998ecf8427e'格式将文件的哈希值发送到服务器(这只是一个示例哈希,我知道'是一个空文件)

    function checkHash (fileHash){
    request.post({
        headers: {'content-type' : 'application/x-www-form-urlencoded'},
        url: 'http://localhost:3000/api/checkBoths/hashcheck',
        method: 'POST',
        form: {
           fileHash: fileHash
        }
    }, function(error, response, body){
       if(error) {
        console.log(error);
       } else {
        console.log(response.statusCode, body);
       }
    });
    
    }
    

服务器端:

  • 节点/环回服务器在localhost:3000运行。

  • hashCheck函数用于读取客户端发布的数据,并查询与哈希值匹配的MySQL数据库。

  • 如果数据库中存在哈希,则服务器的响应格式为goodResult : true,否则为goodResult : false

    var request = require('request');
    
    module.exports = function (CheckBoth) {
    
    var goodResult;
    
    CheckBoth.hashCheck = function (fileHash, cb) {
    
    requestGood(fileHash);
    
      function requestGood (fileHash) {
    
    request.get('http://127.0.0.1:3000/api/Goodhashes/' + fileHash + '/exists', function (error, response, body) {
      if (!error && response.statusCode == 200) {
        goodResult = JSON.parse(body).exists;
      }
      if (error) {
        console.error(error);
      }
    });
    console.log(goodResult);
      }
    
    cb( goodResult);
    };
    
    
    CheckBoth.remoteMethod(
    'hashCheck',
    {
      accepts: {arg: 'fileHash', type: 'string'},
      returns: [{arg: 'goodResult', type: 'string'}]
    }
    );
    };
    

问题:

在响应中出现以下内容之前,服务器可以使用~1000个查询进行响应:

{ [Error: connect ECONNREFUSED 127.0.0.1:3000]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 3000 }

我已尝试在服务器代码中添加不同的回调,但这没有任何区别。我想我应该限制对服务器的请求,但我不知道如何实现这一点。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

大多数系统的ulimit默认值为1024.请参阅limits.conf手册(http://linux.die.net/man/5/limits.conf)。

虽然@migg对于确保应用程序中没有内存泄漏是正确的,并且它的进程处理调整系统以获得高负载也是很多应用程序的正常过程。

试试这个并看看它是否有帮助;

$ ulimit -n 65535

编辑:我没有对此进行测试,但这里是来自ibm的关于Windows的文档; http://www-01.ibm.com/support/docview.wss?uid=swg21392080