В чем разница между loginTimeout, connectTimeout и socketTimeout в pgjdbc - PullRequest
1 голос
/ 22 мая 2019

В pgjdbc имеем:

  • loginTimeout
  • connectTimeout
  • socketTimeout
  • cancelSignalTimeout

Но мне не ясно, в чем разница (когда они применяются) между loginTimeout, connectTimeout и socketTimeout.

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Как указано в документации PostgreSQL JDBC :

  • loginTimeout = int

    Укажите, как долго ждать установления соединения с базой данных. Время ожидания указывается в секундах.

  • connectTimeout = int

    Значение времени ожидания, используемое для операций с сокетами. Если подключение к серверу уходит больше времени, чем это значение, соединение разрывается. Время ожидания указывается в секундах, а нулевое значение означает, что оно отключено.

  • socketTimeout = int

    Значение времени ожидания, используемое для операций чтения сокетов. Если читать из сервер занимает больше времени, чем это значение, соединение закрыто. Это может быть использовано как для тайм-аута глобального запроса, так и для метод обнаружения сетевых проблем. Тайм-аут указан в секунд и значение ноль означает, что он отключен.

  • cancelSignalTimeout = int

    Команда отмены отправляется вне полосы через собственное соединение, поэтому Отмена сообщения может сама застрять. Это свойство управляет "подключиться timeout "и" timeout сокета ", используемые для отмены команд. указано в секундах. Значение по умолчанию составляет 10 секунд.

connectTimeout и socketTimeout - это тайм-ауты при работе с сокетами низкого уровня. connectTimeout определяет время, необходимое для установления соединения через сокет TCP. Установление TCP-соединения не гарантирует вход в систему (он даже не гарантирует, что вы подключаетесь к серверу PostgreSQL, просто вы подключились к чему-то, что приняло ваше TCP-соединение). socketTimeout определяет время, когда сокет может быть заблокирован в ожидании чтения из сокета. Это включает все чтения с сервера, не только во время соединения, но и во время последующего взаимодействия с сервером (например, выполнение запросов).

С другой стороны, loginTimeout управляет операцией протокола PostgreSQL для подключения и аутентификации к серверу PostgreSQL. Это включает в себя установление TCP-соединения, за которым следует один или несколько обменов пакетами для установления связи и аутентификации на сервере PostgreSQL (я не знаком с подробностями протокола PostgreSQL, поэтому не могу быть очень конкретным).

Обмен этими пакетами может занять дополнительное время, или если вы подключились к чему-то, что не является сервером PostgreSQL, обмен пакетами может остановиться. Может быть возможно решить эту проблему с тщательным контролем как connectTimeout, так и socketTimeout, но нет никаких гарантий (например, обмен данными, но вход в систему никогда не завершается). Кроме того, поскольку socketTimeout также управляет всеми другими операциями на соединении, вы можете установить его выше (например, для других операций, для получения ответа которых требуется много времени), чем вы готовы ждать входа в систему, чтобы полный.

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

1 голос
/ 23 мая 2019

После прочтения источника я бы сказал, что это так:

  • connectTimeout указывает, как долго ждать установления сетевого соединения TCP

  • loginTimeout указывает, сколько времени может занять весь процесс входа в базу данных.

  • socketTimeout указывает, как долго клиент будет ждать ответана команду с сервера перед выдачей ошибки

Первые два относятся к установлению соединения, третий относится ко всему сеансу базы данных.

УстановлениеTCP-соединение является частью установления соединения с базой данных.

...