У нас есть приложение с длинной схемой опроса по HTTP (хотя этот вопрос может применяться к любому протоколу на основе TCP). Наш тайм-аут довольно высок, 30 минут или около того.Стойкие TCP-соединения, длинные таймауты и мобильные устройства с переключением IP-адресов
То, что мы видим, иногда является быстрым переходом мобильных устройств с IP на IP довольно часто, каждую минуту или около того, и это заставляет десятки долгоживущих сокетов накапливаться на сервере. Не могу не думать, что это вызывает большую нагрузку, чем необходимо.
Так что я предполагаю, что некоторые шлюзы IP лучше других при закрытии соединений, когда устройство перепрыгивает. Стратегии я могу думать о том, чтобы справиться с этим, являются:
- Уменьшение времени ожидания (увеличение срока службы батареи на устройстве)
- Закройте последнее активное соединение, когда пользователь воссоединяется (требуется печенье или отслеживания ID пользователя)
Любые другие?
Я беспокоюсь о keepalives, так как любая активность данных пробуждает радио - вот почему я установил ее на 30 минут. Не уверен, что делать с тайм-аутами в брандмауэре, и не замечает его на сервере так легко :( – sehugg
@sehugg В сети, где вы находитесь, устройство получает общедоступный IP-адрес? Если это так, один из методов, которые я видел с успехом происходит, когда устройство получает IP-адрес, регистрируется с сервером, а затем просто слушает подключаемые соединения, а сервер подключается к устройству, когда у кого-то есть что-то для него. Однако носители не очень поддерживают это и может заблокировать его. Другой способ - отправить устройство SMS, и вы перехватили устройство, чтобы разбудить приложение, чтобы что-то сделать. –
Мне не повезло с подключением к устройству - попробовал это один раз с UDP.Теперь я понимаю ценность таких услуг, как APNS от Apple и C2DM от Google :) – sehugg