Push-сообщения из приложения Azure в приложение MonoTouch (iPhone) без Apple Push-уведомлений - PullRequest
3 голосов
/ 05 апреля 2011

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

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

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

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

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

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

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

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

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

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

Джон

1 Ответ

1 голос
/ 05 апреля 2011

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

...