2010-10-19 2 views
2

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

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

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

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

Любые другие?

ответ

0

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

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

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

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

+0

Я беспокоюсь о keepalives, так как любая активность данных пробуждает радио - вот почему я установил ее на 30 минут. Не уверен, что делать с тайм-аутами в брандмауэре, и не замечает его на сервере так легко :( – sehugg

+0

@sehugg В сети, где вы находитесь, устройство получает общедоступный IP-адрес? Если это так, один из методов, которые я видел с успехом происходит, когда устройство получает IP-адрес, регистрируется с сервером, а затем просто слушает подключаемые соединения, а сервер подключается к устройству, когда у кого-то есть что-то для него. Однако носители не очень поддерживают это и может заблокировать его. Другой способ - отправить устройство SMS, и вы перехватили устройство, чтобы разбудить приложение, чтобы что-то сделать. –

+0

Мне не повезло с подключением к устройству - попробовал это один раз с UDP.Теперь я понимаю ценность таких услуг, как APNS от Apple и C2DM от Google :) – sehugg

0

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

+0

Не будет ли поддерживать аккумулятор на устройстве, как если бы мы отправили данные через сокет? – sehugg

+0

Да, но не так, как обрабатывать его в приложении. – nos

 Смежные вопросы

  • Нет связанных вопросов^_^