Когда
Когда вы хотите предотвратить разрыв соединения.
Как
Отправка чего-либо после периода бездействия возможна путем отправки TCP / IP KeepAlives или отправки чего-либо самостоятельно (рекомендуется, поскольку установка периода, в течение которого KeepAlives TCP / IP отправляется, будет применяться на системном уровне ко всем подключенным сокетам, а не в уровень приложения).
Сколько
Как долго это кусок нити? Сначала вы должны понять, почему соединение обрывается:
Причина разрыва соединения:
Домашние / коммерческие «маршрутизаторы» и брандмауэры, которые находятся в состоянии «с состоянием» и осведомлены о соединении, как правило, сбрасывают внешние TCP-соединения после некоторого периода бездействия
Таким образом, не имеет ничего общего с вашим приложением или TCP / IP , а с аппаратным или программным обеспечением , через которое проходит ваше соединение. Вы могли бы провести некоторое исследование типичных периодов бездействия, когда домашние / коммерческие устройства / программное обеспечение могут проходить через соединение (см. Списки ниже). Однако, если одноранговым узлом может быть потенциально любой пользователь в Интернете:
В конечном счете, если вы не можете знать, через какое оборудование / программное обеспечение они проходят: разрешите клиенту установить собственный период бездействия (при котором можно отправлять что-либо, чтобы поддерживать соединение).
или отправка KeepAlives (или вашего аналога) через короткие промежутки времени (бездействия) для учета всех случаев (хотя ненужный трафик - это плохо, дополнительный пакет каждые несколько секунд бездействия в настоящее время - это падение океан, кроме мобильных сетей еще). Но имейте в виду, что в соответствии со спецификацией TCP / IP он должен выдерживать временные перебои, поэтому его слишком низкое значение может привести к нежелательному эффекту не переживания временного простоя, начиная с http://aplawrence.com/Bofcusm/2426.html:
Недостатком настройки параметров keepalive является то, что вы также
резко ограничить устойчивость TCP к перебоям в работе кабелей. Сеанс
чьи оба конца живы и готовы к нормальной жизни, остается в живых, даже если
промежуточный кабель или маршрутизатор отключается на несколько минут. Если
вы сказали серверу отчаянно отправлять сообщения активности, он заметит
Обрыв кабеля и отключение сеансов, которые в противном случае выжили бы
хорошо.
Но у вас был бы сбой, если бы вы все равно делали какие-то сообщения, так что вы должны справиться с этим, и я думаю, что эта проблема устарела, так как у вас нет временных отключений (они, скорее всего, будут постоянными - кабель отключен) с сегодняшними днями постоянные соединения (в отличие от изворотливого набора, скажем). В случае сбоя вы можете захотеть восстановить соединение (например, RDP) или нет (например, Telnet).
Некоторые исследования того, какие обычные приложения используются:
App | KeepAlive sent after | configurable | ref
--------------------------------------------------------------
Telnet | 600 seconds | Y | http://www-01.ibm.com/support/docview.wss?uid=nas14adccb91a24d9ed28625694900513857
MS RDP | ?
И некоторые исследования того, какие устройства / программное обеспечение сбрасывают неактивные соединения и когда:
Device/SW | dropped after | configurable | ref
--------------------------------------------------------------
Windows 2003 Firewall | 24 hours | ? | http://technet.microsoft.com/en-us/library/cc755604(WS.10).aspx
SonicWall TZ100/200 | 5 mins | Y | http://www.sonicwall.com/downloads/SonicWALL_TZ_100_200_Series_Getting_Started_Guide.pdf
Netgear FR114P | 5 mins | N | http://www.broadbandreports.com/forum/remark,4182300
Cisco ASA | 1 hour | Y | http://www.cisco.com/c/en/us/td/docs/security/asa/asa91/configuration/firewall/asa_91_firewall_config/conns_connlimits.html
Пожалуйста, отредактируйте / уточнить эти списки на благо всех.