NodeJS并发请求导致Socket挂起错误

时间:2017-10-28 07:38:57

标签: node.js sockets concurrency request

在更新我的服务器软件包之后,几天前我开始遇到问题。

问题是,当两个请求同时发出时(两次外部调用我的API),它会返回" Socket Hang Up"错误即可。

我的API就像一个代理,它接收请求处理它们并向远程服务器发送另一个请求,等待响应,处理响应并返回一些数据。

这是一个例子

  1. 我的第一个请求

    getPublicIpAddressIpify(req, callback) {
    request.get({
        url: 'https://api.ipify.org?format=json'
    }).then((response) => {
        if (response) {
            let jsonResult = JSON.parse(response);
            callback.onSuccess(jsonResult['ip']);
        }
        else {
            throw new Error("Cannot determine public ip");
        }
    })
        .catch((error) => {
            callback.onError(error);
        });
    
     }
    
  2. 我的第二个请求

    getFrontPage(req, callback) {
    request.get({
        resolveWithFullResponse: true,
        url: 'https://google.com'
    }).then((response) => {
        // Handle response
    })
        .catch((error) => {
            callback.onError(error);
        });
    
     }
    
  3. 因此,当这些请求大约同时发出时,会发生套接字挂起

    这是调试输出

    { request: 
       { debugId: 1,
         uri: 'https://api.ipify.org/?format=json',
         method: 'GET',
         headers: { host: 'api.ipify.org' } } }
    { response: 
       { debugId: 1,
         headers: 
          { server: 'Cowboy',
            connection: 'close',
            'access-control-allow-origin': '*',
            'content-type': 'application/json',
            date: 'Sat, 28 Oct 2017 07:29:48 GMT',
            'content-length': '24',
            via: '1.1 vegur' },
         statusCode: 200,
         body: '{"ip":"x.x.x.x"}' } }
    { name: 'User',
      email: 'someuser@gmail.com',
      accountType: 'publisher', }
    { request: 
       { debugId: 2,
         uri: 'https://google.com/',
         method: 'GET',
         headers: 
          { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
            Host: 'www.google.com',
            Origin: 'https://www.google.com',
            'Accept-Language': 'en-US,en;q=0.5',
            Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' } } }
    

    这个错误几乎可以在我尝试的时候重现。

    我在多台服务器上测试了这段代码,抛出了同样的错误。 如果在此情况下向google.com发送请求之前设置了延迟,则可以正常工作。

    有趣的是,我的API可以同时处理许多其他请求,但只有这种情况会导致错误。

    在系统更新之前,此工作正常。我试图运行npm update,但这并没有解决问题。

    此外,我尝试设置

    的全局设置
    var http = require('http');
    http.globalAgent.maxSockets = Infinity;
    

    它也没有用。

    请帮助解决这个问题,在发送第二个请求之前总是很奇怪并且延迟一直没有工作,有时它只是等待更长时间并且最终会出现同样的错误。

    如果有任何帮助或建议,我将不胜感激。

0 个答案:

没有答案
相关问题