Nano Hash - криптовалюты, майнинг, программирование

В чем разница между loginTimeout, connectTimeout и socketTimeout в pgjdbc

В pgjdbc у нас есть:

  • loginTimeout
  • connectTimeout
  • socketTimeout
  • cancelSignalTimeout

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


  • Вы читали документацию? Если да, то что в этом непонятного? 23.05.2019
  • Да, у меня есть. Я не вижу, чем connectTimeout отличается от loginTimeout, насколько я понимаю, клиент установит SSL-соединение с сервером, а затем войдет в базу данных ... Так же loginTimeout запускается после того, как SSL-соединение установлено, или он начинается вместе с connectTimeout, поскольку я отправил команду входа в систему, которая использует SSL? И будет ли socketTimeout применяться во время входа в систему, поскольку, я полагаю, это чтение сокета? 23.05.2019

Ответы:


1

Как описано в документации 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-соединения, используемого для команд отмены.

24.05.2019
  • В каком-то смысле loginTimeout ›= connectTimeout› = socketTimeout, верно? 24.05.2019
  • @mFeinstein Первые два: да, последний следует рассматривать как независимый. Он может быть больше или меньше в зависимости от желаемого эффекта, поскольку он применяется ко всем чтениям из сокета. Я бы сказал, что вы обычно хотите, чтобы он был больше. Если он меньше, чем loginTimeout, возможно, что вход в систему прерывается таймаутом чтения до истечения тайм-аута входа в систему (хотя это будет зависеть от точного обмена протоколами, необходимого для входа в систему). 24.05.2019
  • Идеально! Спасибо, Марк! 24.05.2019

  • 2

    Прочитав исходник, я бы сказал, что это так:

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

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

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

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

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

    23.05.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..