В pgjdbc у нас есть:
loginTimeout
connectTimeout
socketTimeout
cancelSignalTimeout
Но мне непонятно, в чем разница (когда они применяются) между loginTimeout
, connectTimeout
и socketTimeout
.
В pgjdbc у нас есть:
loginTimeout
connectTimeout
socketTimeout
cancelSignalTimeout
Но мне непонятно, в чем разница (когда они применяются) между loginTimeout
, connectTimeout
и socketTimeout
.
connectTimeout
отличается от loginTimeout
, насколько я понимаю, клиент установит SSL-соединение с сервером, а затем войдет в базу данных ... Так же loginTimeout
запускается после того, как SSL-соединение установлено, или он начинается вместе с connectTimeout
, поскольку я отправил команду входа в систему, которая использует SSL? И будет ли socketTimeout
применяться во время входа в систему, поскольку, я полагаю, это чтение сокета? 23.05.2019 Как описано в документации PostgreSQL JDBC:
loginTimeout = int
Укажите, как долго ждать установления соединения с базой данных. Тайм-аут указывается в секундах.
connectTimeout = int
Значение тайм-аута, используемое для операций подключения к сокету. Если соединение с сервером занимает больше времени, чем это значение, соединение разрывается. Тайм-аут указывается в секундах, и нулевое значение означает, что он отключен.
socketTimeout = интервал
Значение тайм-аута, используемое для операций чтения сокета. Если чтение с сервера занимает больше времени, чем это значение, соединение закрывается. Это может использоваться как для тайм-аута глобального запроса методом грубой силы, так и для метода обнаружения сетевых проблем. Тайм-аут указывается в секундах, и нулевое значение означает, что он отключен.
cancelSignalTimeout = int
Команда отмены отправляется внеполосно через собственное соединение, поэтому само сообщение отмены может застрять. Это свойство управляет «таймаутом подключения» и «тайм-аутом сокета», используемыми для команд отмены. Тайм-аут указывается в секундах. Значение по умолчанию - 10 секунд.
connectTimeout
и socketTimeout
- это таймауты для низкоуровневых операций сокета. connectTimeout
определяет время, необходимое для установления соединения через сокет TCP. Установление TCP-соединения не гарантирует входа в систему (это даже не гарантирует, что вы подключаетесь к серверу PostgreSQL, просто вы подключились к чему-то, что принимает ваше TCP-соединение). socketTimeout
определяет время, в течение которого сокет может быть заблокирован в ожидании чтения из сокета. Это включает в себя все считывания с сервера не только во время соединения, но и во время последующего взаимодействия с сервером (например, выполнения запросов).
С другой стороны, loginTimeout
управляет операцией протокола PostgreSQL по подключению и аутентификации к серверу PostgreSQL. Это включает в себя установление TCP-соединения с последующим обменом одним или несколькими пакетами для подтверждения и аутентификации на сервере PostgreSQL (я не знаком с деталями протокола PostgreSQL, поэтому не могу быть очень конкретным).
Обмен этими пакетами может занять дополнительное время, или, если вы подключились к чему-то, кроме сервера PostgreSQL, обмен пакетами может остановиться. Возможно, это удастся решить с помощью тщательного контроля как connectTimeout
, так и socketTimeout
, но нет никаких гарантий (например, происходит обмен данными, но вход в систему не завершается). Кроме того, поскольку socketTimeout
также управляет всеми другими операциями в соединении, вы можете захотеть установить его выше (например, для других операций, требующих много времени для получения ответа), чем вы готовы дождаться завершения входа в систему.
cancelSignalTimeout
используется в качестве тайм-аута подключения и отдельного TCP-соединения, используемого для команд отмены.
Прочитав исходник, я бы сказал, что это так:
connectTimeout
указывает, как долго ждать установления сетевого соединения TCP.
loginTimeout
указывает, сколько времени может занять весь процесс входа в базу данных.
socketTimeout
указывает, как долго клиент будет ждать ответа на команду от сервера, прежде чем выдать ошибку.
Первые два связаны с установлением соединения, третье актуально для всего сеанса базы данных.
Установление TCP-соединения - это часть установления соединения с базой данных.
loginTimeout
›=connectTimeout
› =socketTimeout
, верно? 24.05.2019loginTimeout
, возможно, что вход в систему прерывается таймаутом чтения до истечения тайм-аута входа в систему (хотя это будет зависеть от точного обмена протоколами, необходимого для входа в систему). 24.05.2019