Постоянные соединения TCP, длительные тайм-ауты и мобильные устройства со скачкообразной перестройкой IP - PullRequest
2 голосов
/ 19 октября 2010

У нас есть приложение с длинной схемой опроса по HTTP (хотя этот вопрос может относиться к любому протоколу на основе TCP). Наш тайм-аут довольно высокий, 30 минут или около того.

Иногда мы наблюдаем, как мобильные устройства переходят с IP на IP довольно часто, каждую минуту или около того, и это приводит к тому, что на сервере накапливаются десятки долгоживущих сокетов. Не могу не думать, что это вызывает больше нагрузки, чем необходимо.

Итак, я предполагаю, что некоторые IP-шлюзы лучше, чем другие, закрывают соединения, когда устройство отключается. Стратегии, которые я могу придумать, чтобы справиться с этим:

  • Уменьшение времени ожидания (увеличение времени автономной работы устройства)
  • Закрытие последнего активного соединения, когда пользователь повторно подключается (требуется отслеживание файлов cookie или идентификатора пользователя)

Кто-нибудь еще?

Ответы [ 2 ]

0 голосов
/ 19 октября 2010

Я бы хотел закрыть последнее активное соединение, используя cookie или какой-то идентификатор на вашем сервере.Да, это больше работы, но как только пользователь переходит на адреса, вы можете найти старый сокет и очистить ресурсы в пути.Должно быть довольно легко привязать имя пользователя или что-то в этом роде.

Другая проблема, с которой вы можете столкнуться, даже если пользовательское оборудование не меняет адреса, некоторые мобильные сети и, возможно, ваша собственная сеть можетиметь брандмауэр statefull, который будет очищать неиспользуемые сокеты, что вызовет проблемы с подключением, поскольку для нового подключения снова потребуется syn / syn-ack.Просто о чем следует помнить, если вы замечаете проблемы с подключением.

Если вы все же решили поиграть с приложением Keep Alive, пожалуйста, не будьте слишком агрессивными, болтливые приложения - это чума мобильных сетей, и те, которыеУдар сети, когда он теряет соединение с сервером, может вызвать всевозможные проблемы для сети (и вам, если оператор подключится).У Atleast есть своего рода механизм отката для повторного подключения, и, возможно, даже попытаться выяснить, почему устройство переключает IP-адреса каждую минуту.Если он работает должным образом, этого не должно быть.

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

0 голосов
/ 19 октября 2010

Если вы можете, включите поддержку активности TCP на сокетах и ​​дайте им довольно низкий таймер (например, каждые 1-5 минут). Пока вы читаете из сокета, вы будете обнаруживать недоступный узел быстрее - и с меньшими затратами ресурсов на телефоне, чем с уменьшением времени ожидания вашего приложения 30 минут.

...