Сокращение сердцебиения против keepalive

Каковы плюсы и минусы для реализации собственного сердцебиения и настройки поддержки сокета?

Я где-то читал, что keepalive иногда может выйти из строя, и соединение все равно будет закрыто (зависит от структуры сети). Другое дело, что собственное сердцебиение может определять, реагирует ли приложение (не только сокет).

Моя главная цель - обеспечить все это: поддерживать соединение активным, даже если никакие данные не отправляются (за исключением возможного пульса), быстрое обнаружение потери соединения с обеих сторон, обнаружение реакции приложения.

Я уже реализовал простое сердцебиение на двух концах, и оно прекрасно работает, однако мне интересно, возможно, я смогу заменить его с помощью встроенной функции поддержки активности.

1 ответ

Решение

Одна из проблем встроенной функции поддержки активности TCP состоит в том, что ее не всегда легко настроить. Например, в Linux существуют различные опции для setsockopt() (например, TCP_KEEPIDLE, TCP_KEEPCNT и TCP_KEEPINTVL), которые вы можете использовать, чтобы установить поведение keepalive на то, что вам нужно, но в других ОС это поведение не так легко настроить, по крайней мере, нет программно Поэтому, если вы хотите, чтобы поддерживающая активность вашей программы была переносимой на различные ОС и работала согласованно на всех из них, то, как правило, следует использовать свое собственное сердцебиение.

С другой стороны, могут существовать некоторые программы или сетевые протоколы, которые с трудом поддерживают концепцию сообщения "биение / неактивность" (или вы можете захотеть, чтобы ваша программа могла использовать много протоколов, не прибегая к с отдельной логикой keepalive для каждого поддерживаемого протокола), и в этом случае вы можете использовать встроенную keepalive, поскольку она имеет возможность отправлять и получать "прозрачные" пакеты keepalive, которые не влияют на содержимое потока данных TCP, В этом случае может быть полезен встроенный keepalive (особенно если вам действительно нужен код keepalive для работы под Linux).

Другие вопросы по тегам