ох, это зона боли при разработке под iOS. как известно, «настоящая» многозадачность приложениям пользовательского уровня в iOS 4.x (и выше) недоступна: при уходе в background процесс довольно быстро перестает получать процессорное время и вообще «замораживается» (это сделано для экономии заряда аккумулятора). как следствие, через некоторое время «протухают» по таймауту и разваливаются все созданные этим приложением сокетные соединения — что плохо для инстант-мессенджера (если в течение определенного времени клиент не отправляет keepalive-пакеты, сервер считает, что клиент «отвалился» и отправляет юзера в оффлайн по таймауту).
в принципе, решение есть: среди нескольких режимов бэкграунда в iOS есть режим под названием VoIP, который работает именно так, как надо — в нем процесс получает немного тиков CPU, когда в его сокет приходит какой-нибудь пакет (это сделано для того, чтобы VoIP-приложения могли принимать входящие звонки). мы пытались использовать этот режим — попутно подпилив сервер (опция при хэндшейке), чтобы он мог меняться ролями с клиентом по части отправки keepalive-пакетов.
все отлично работало, однако цензоры из Apple зареджектили приложение на том основании, что в нем отсутствует VoIP-функциональность.
поэтому на данный момент реализован компромиссный вариант. перед уходом в «фон» клиент передает на сервер специальное сообщение и отключается. получив такое сообщение, сервер не переключает presence-статус пользователя в состояние offline (как обычно делает, когда теряет соединение с клиентом), а пользователя «как бы» в онлайне для контактов из его контакт-листа. соответственно, все контакты пользователя продолжают видеть его в подключенном состоянии и могут писать ему сообщения (которые доставляются через стандартный механизм Apple Push Notifications).
но я согласен, что реконнект при каждом переключении в приложение неудобен. самым привлекательным решение было бы, конечно же, добавление в клиент «настоящей» поддержки VoIP, но мы еще подумаем над более быстрым фиксом. :)
мы осознаем наши проблемы с дизайном и работаем над ними. характерный пример — новый Mail.Ru Агент для MacOS или обновленная Почта (которая, на мой личный взгляд, за последнее время сделала огромный рывок по всем направлениям).
однако Агент — более сложный продукт, чем может показаться на первый взгляд, поэтому работа над новой концепцией дизайна действительно занимает больше времени, чем хотелось бы.
основа нашей аудитории — это Россия, Украина, Казахстан и Узбекистан (для простоты будем называть эти страны «СНГ»). Скайпом пользуется весь мир.
население этих стран в сумме составляет примерно 230 млн. мировое население — 7 млрд. таким образом, население СНГ составляет примерно 3,5% населения мира.
таким образом, доля юзеров из СНГ в Скайповском счетчке примерно соответствует 875 тыс. в Агенте же их 3,5 млн. получается, что Агент в СНГ ровно в 4 раза популярнее, чем Скайп.
но вообще я шучу. :) это очень вульгарный расчет, не учитывающий демографическую специфику (ясно, что пользователей Скайпа на душу населения в Индонезии и на Украине несколько отличается). тем не менее, в каждой шутке есть доля шутки.
а если серьезно, то существуют аналитические агентства, занимающиеся исследованиями такого рода.
на данный момент пиковое количество одновременных коннектов к кластеру Агента — около 3,5 млн. но наша аудитория, в основном, сконцентрирована в России и СНГ, а Skype используеся по всему миру.
= а оставляет пользователя «как бы в онлайне»
в принципе, решение есть: среди нескольких режимов бэкграунда в iOS есть режим под названием VoIP, который работает именно так, как надо — в нем процесс получает немного тиков CPU, когда в его сокет приходит какой-нибудь пакет (это сделано для того, чтобы VoIP-приложения могли принимать входящие звонки). мы пытались использовать этот режим — попутно подпилив сервер (опция при хэндшейке), чтобы он мог меняться ролями с клиентом по части отправки keepalive-пакетов.
все отлично работало, однако цензоры из Apple зареджектили приложение на том основании, что в нем отсутствует VoIP-функциональность.
поэтому на данный момент реализован компромиссный вариант. перед уходом в «фон» клиент передает на сервер специальное сообщение и отключается. получив такое сообщение, сервер не переключает presence-статус пользователя в состояние offline (как обычно делает, когда теряет соединение с клиентом), а пользователя «как бы» в онлайне для контактов из его контакт-листа. соответственно, все контакты пользователя продолжают видеть его в подключенном состоянии и могут писать ему сообщения (которые доставляются через стандартный механизм Apple Push Notifications).
но я согласен, что реконнект при каждом переключении в приложение неудобен. самым привлекательным решение было бы, конечно же, добавление в клиент «настоящей» поддержки VoIP, но мы еще подумаем над более быстрым фиксом. :)
однако Агент — более сложный продукт, чем может показаться на первый взгляд, поэтому работа над новой концепцией дизайна действительно занимает больше времени, чем хотелось бы.
просто мы в какой-то момент провели большую работу по борьбе с ним, и считаем, что у нас получилось неплохо.
население этих стран в сумме составляет примерно 230 млн. мировое население — 7 млрд. таким образом, население СНГ составляет примерно 3,5% населения мира.
таким образом, доля юзеров из СНГ в Скайповском счетчке примерно соответствует 875 тыс. в Агенте же их 3,5 млн. получается, что Агент в СНГ ровно в 4 раза популярнее, чем Скайп.
но вообще я шучу. :) это очень вульгарный расчет, не учитывающий демографическую специфику (ясно, что пользователей Скайпа на душу населения в Индонезии и на Украине несколько отличается). тем не менее, в каждой шутке есть доля шутки.
а если серьезно, то существуют аналитические агентства, занимающиеся исследованиями такого рода.