В чем разница между net .Dialer # KeepAlive и http.Transport # IdleTimeout? - PullRequest
0 голосов
/ 09 января 2020
type Dialer struct {
    ......
    // KeepAlive specifies the keep-alive period for an active
    // network connection.
    // If zero, keep-alives are enabled if supported by the protocol
    // and operating system. Network protocols or operating systems
    // that do not support keep-alives ignore this field.
    // If negative, keep-alives are disabled.
    KeepAlive time.Duration
}
type Transport struct {
    ......
// IdleConnTimeout is the maximum amount of time an idle
    // (keep-alive) connection will remain idle before closing
    // itself.
    // Zero means no limit.
    IdleConnTimeout time.Duration
}

Я думаю, что keep-alive - это время, когда соединение tcp должно сохраняться. Но IdleConnTimeout выглядит так же. Так в чем же разница между ними, и если я настрою эти переменные, то как долго будет держаться соединение tcp?

1 Ответ

3 голосов
/ 09 января 2020

Термин keep-alive означает разные вещи в двух контекстах.

В транспортной документации net / http этот термин используется для обозначения постоянных соединений . Поддерживающее или постоянное соединение - это соединение, которое можно использовать для нескольких HTTP-транзакций.

Поле Transport.IdleConnTimeout указывает, как долго транспорт сохраняет неиспользуемое соединение в пуле. перед закрытием соединения.

Документация net Dialer использует термин keep-alive для обозначения функции TCP для проверки работоспособности соединения .

Поле Dialer.KeepAlive указывает, как часто зонды поддержания активности TCP отправляются одноранговому узлу.

Эти две настройки выполняют разные действия на разных уровнях стека.

...