При выполнении запроса http в файле node.js продолжайте работать с ошибкой «ETIMEOUT, время ожидания при обращении к DNS-серверам». - PullRequest
1 голос
/ 09 ноября 2011

Эта ошибка возникает всякий раз, когда процесс узла делает http-запрос для получения информации о пользователе из веб-API.

Сценарий таков:
Я запускаю TCP-сервер, используя узел, и когда он получает запрос «входа в систему» ​​от клиента, он отправляет запрос http GET другому веб-API для получения пользователяинформация.
При увеличении количества пользователей процесс узла начинает выдавать ошибку "ETIMEOUT" при получении информации о пользователе.И однажды, если произошла ошибка, все запросы после этого выдают одну и ту же ошибку.
Я пытался выполнить тот же запрос с помощью wget , но все в порядке, поэтому я думаю, что, возможно, это непроблема с сетью.

И, как ни странно, после увеличения лимита открытых файлов до 10,0000 с помощью ulimit -n все идет хорошо до приращения пользователя следующего уровня.

здесь функция fetch:

fetchUserInfo = function(callback) {
  var http = require('http');
  var opt = { 
    agent: false,
    host: 'www.someapi.net',
    port: 80,
    path: '/userInfo.php'
  }
  var body = ''; 
  var req = http.request(opt, function(res) {
    res.setEncoding('utf8');
    res.on('data', function(chunk){
      body += chunk;
    });
    res.on('end', function() {
      if(callback) {
        callback(body);
      }
    });
  });
  req.on('error', function(e) {
    sys.log("User info fetch error: " + e.message);
    if(callback) {
      callback();
    }   
  }); 
  req.end();
}

Моя среда - Debian GNU / Linux 6.0 с узлом v0.4.10.
Есть какие-нибудь идеи?Спасибо в адвенсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...