Push-сообщения из приложения Azure в приложение MonoTouch (iPhone) без push-уведомлений Apple

В настоящее время я разрабатываю приложение для iOS (используя MonoTouch), которое будет иметь серверный компонент, работающий в Windows Azure. Приложение, по сути, будет приложением типа чата, в котором пользователи будут генерировать сообщения в своих клиентах и ​​отправлять их на сервер, который затем должен будет пересылать эти сообщения (как можно быстрее) другим клиентам, которым пользователь может отправлять сообщения. к.

Мой вопрос: существует ли рекомендуемая практика для разработки такого приложения, когда клиентам необходимо получать «push»-сообщения с сервера?

Я рассмотрел несколько вариантов, но был бы признателен за обратную связь.

  • Первый вариант — использовать службу push-уведомлений Apple (APN). У меня есть две проблемы по этому поводу: во-первых, клиентам нужно получать сообщения только тогда, когда они в сети (APN отправляет сообщения, когда приложение закрыто, что мне не нужно или не нужно); и, во-вторых, существует вероятность того, что будет большой объем сообщений, что, как я знаю, Apple, вероятно, будет недовольно (совершенно справедливо).

  • Второй вариант, который я рассматривал, — это использование веб-службы (на основе WCF) и вызов этой службы клиентом каждые (скажем) 2-3 секунды, что является максимальной задержкой, которую мы можем допустить. Однако это может привести к большому количеству потенциально ненужного сетевого трафика («у вас есть что-нибудь для меня?», «нет», повторяется до тошноты).

  • Третий вариант — поддерживать постоянное соединение веб-службы между клиентом и сервером. Когда клиентское приложение запускается, оно вызывает метод веб-службы в фоновом потоке. Сервер будет держать соединение открытым (ничего не возвращая), и если какие-либо сообщения придут, он немедленно вернет их. Это соединение может истечь, скажем, через 2 минуты, после чего оно будет восстановлено. Кажется, это делает то, что я хочу, но опять же, я обеспокоен тем, что в любой момент будет открыто много подключений к серверу, что может потребовать ненужных ресурсов сервера.

  • Четвертый вариант — использовать постоянное соединение через TCP (или UDP, хотя, насколько я понял, Windows Azure не поддерживает это). Это кажется хорошим вариантом, но, опять же, может быть излишним с точки зрения использования сервера — потенциально в любой момент могут быть подключены сотни или даже тысячи клиентов.

  • Пятый вариант заключается в том, чтобы каким-то образом заставить сервер отправлять сообщения непосредственно клиенту, возможно, запустив на клиенте мини-веб-сервер или что-то подобное. Однако, поскольку приложение будет работать в сетях 3G и WiFi (вне моего контроля), я не ожидаю, что входящие порты будут открыты для такого рода вещей.

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

Заранее спасибо,

Джон


person John    schedule 05.04.2011    source источник


Ответы (1)


Вы смотрели Pubnub http://www.pubnub.com/?

person jamie    schedule 05.04.2011