Могу ли я иметь тайм-ауты TCP до 10-20 минут?
Важно полагаться на гарантированную доставку TCP даже в случае мобильного клиента, который может исчезнуть в туннеле на долгое время, когда TCP со стандартными настройками прекращает и закрывает соединение. Можно ли заставить реализацию TCP продолжать попытки в течение 10-20 минут? Какие настройки должны быть выполнены на Linux и на мобильных телефонах (Android и iOS)? Спасибо.
2 ответа
Это невозможно. Чтобы решить эту проблему, используйте слой поверх уровня TCP, который обеспечивает необходимую семантику. Этот уровень должен будет добавить идентификатор к каждому сообщению, реализовать подтверждение сообщения, восстановить соединение TCP, если оно разорвано, и повторно отправить все неподтвержденные сообщения.
man tcp
- ищите tcp_retries[1,2] для машин Linux. Я понятия не имею, что делать для Android, и учитывая отношение Apple к настройке на системном уровне, вероятно, нет абсолютно никакого способа сделать это на iOS, кроме случаев, когда вы делаете джейлбрейк.
Если не учитывать время ожидания сокета TCP, большинство приложений будут реализовывать свои собственные значения времени ожидания, которые, вероятно, значительно короче, чем на транспортном уровне. То, является ли это настраиваемым вообще, ясно зависит от рассматриваемого приложения - для него нет общесистемного параметра.