Как установить тайм-аут для http-подключений клиента в node.js - PullRequest
9 голосов
/ 27 августа 2010

Я пишу приложение node.js, которое должно общаться с сервером.Он устанавливает http-соединение со следующим кодом:

var client = http.createClient(u.port, u.hostname, u.secure);
client.on("error", function(exception) {
    logger.error("error from client");
});
var request = client.request(method, u.path, headers);

Я не вижу никакой опции в документации по node.js для установки тайм-аута соединения, и кажется, что он установлен на 20 секунддефолт.Проблема, с которой я столкнулся, заключается в том, что у меня есть пользователи в Китае, работающие в медленной или нестабильной сети, которые иногда превышают время ожидания подключения к нашему центру обработки данных в США.Я хотел бы увеличить время ожидания до 1 минуты, чтобы посмотреть, исправит ли это их.

Есть ли способ сделать это в node.js?

Ответы [ 4 ]

7 голосов
/ 01 октября 2010

Попробуйте

request.socket.setTimeout (60000);// 60 сек

4 голосов
/ 28 августа 2010

Я думаю, вы можете сделать что-то вроде:

request.connection.setTimeout(60000)

request.connection возвращает объект net.Stream, связанный с соединением. и net.Stream имеет метод setTimeout.

2 голосов
/ 20 декабря 2014

В узле нет возможности увеличить время ожидания подключения. Поскольку обычно время ожидания соединения (то есть время установления соединения) является общесистемной настройкой для всех приложений (например, 21 секунда в Windows , от 20 до 120 секунд в Linux ). См. Также Тайм-ауты в пакете запроса .

Напротив, Node позволяет установить уменьшенное время ожидания и прервать соединение, даже если соединение еще не установлено.

Дальнейшие таймауты (в случае установления соединения) можно контролировать в соответствии с документацией (см. request.setTimeout, socket.setTimeout).

1 голос
/ 09 марта 2014

Прежде чем устанавливать тайм-аут, необходимо дождаться, чтобы сначала было установлено соединение с клиентским сокетом.Для этого добавьте обратный вызов для события 'socket':

req.on('socket', function (socket) {
    myTimeout = 500; // millis
    socket.setTimeout(myTimeout);  
    socket.on('timeout', function() {
        console.log("Timeout, aborting request")
        req.abort();
    });
}).on('error', function(e) {
    console.log("Got error: " + e.message);
    // error callback will receive a "socket hang up" on timeout
});

См. Этот ответ .

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