COMET (серверный клик для клиента) на iPhone

Я хочу установить какие-то функции типа socket / COMET с моего сервера (ов) в мое приложение iPhone. По существу, в любое время, когда пользователю удается установить произвольный объект «грязный» на сервере, скажем, обновив свой адрес. Обратная связь должна быть перенесена с сервера на любых клиентов, поддерживающих живой опрос на сервере. Это модное слово COMET, я полагаю. Я знаю, что там есть DWR для приложений веб-браузера, поэтому я думаю, может быть, лучше всего настроить скрытый UIWebView в каждом из моих controllerов, чтобы я мог выйти из коробки COMET из своей инфраструктуры javascript? Есть ли более элегантный подход?

Для использования клиента STOMP существует несколько решений.

STOMP невероятно прост и легковес, идеально подходит для iPhone.

Я использовал это в качестве отправной точки и нашел это очень хорошим. У него несколько проблем с распределением объектов / утечки памяти, но как только я получил поддержку программирования iPhone, их было легко сгладить.

Надеюсь, это поможет!

Можете ли вы использовать обычный сокет TCP / IP в своем приложении?

A) Если да, то, безусловно, сырой разъем TCP / IP является более элегантным решением. Из вашего приложения iPhone вы просто ждете уведомлений. Разъем открыт, пока ваше приложение открыто. Если вы хотите, вы можете даже использовать HTTP-протокол / заголовки.

На стороне сервера вы можете использовать некоторую структуру для записи серверов, которые эффективно обрабатывают тысячи открытых соединений TCP / IP. например, Twisted , EventMachine или libevent . Затем просто привяжите основной сокет сервера к http-порту (80).

Идея заключается в использовании сервера, который хранит только одну структуру данных для каждого клиента. Получает событие обновления из некоторого приложения БД и затем подталкивает его к правильному клиенту.

B) Нет, вы должны использовать Apache и http-клиент на стороне iPhone. Тогда вы должны знать, что все решение COMET на самом деле работает для ограничений HTTP-протокола и Apache / PHP.

Apache был разработан для обработки многих коротких временных соединений. Насколько мне известно, только самые новые версии Apache (mpm worker) могут эффективно обрабатывать большое количество открытых соединений. Ранее Apache поддерживал один процесс за соединение.

У веб-браузеров есть ограничение одновременных открытых подключений к одному веб-серверу (URL-адрес фактически, например, http://www.foo.com, а не IP-адрес http://www.foo.com). И предел – 2 соединения. Кроме того, браузер разрешает только соединения AJAX с тем же сервером, с которого была загружена основная HTML-страница.

Я написал веб-сервер для такого рода вещей. Я нажимаю обновления в реальном времени через сервер с длинным опросом, и, например, у меня было safari на iPhone, отображающее эти данные.

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

WebSync имеет javascript-клиент, который работает на iPhone, если это то, что вы после

Будет ли длительный опрос работать над тем, чего вы хотите достичь? Вы можете реализовать клиентскую часть в нескольких строках обычного Javascript, который будет легче, чем любая инфраструктура.

Также было бы тривиально реализовать его в ObjC (подключиться, дождаться ответа или таймаута, повторить)

Ответ на мой вопрос Простой пример «длинного опроса»? надеюсь, объясните, насколько предельно просто длинный опрос ..

В основном вы просто запрашиваете URL как обычно – веб-сервер будет принимать соединение, но не отправлять какие-либо данные, пока они не будут доступны. Когда вы получаете данные или время ожидания соединения, вы повторно соединяете (и повторяете)

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

StreamMub Comet Server работает с iPhone из коробки, нет плагинов или чего-то еще. Просто просмотрев их веб-сайт на моем iPhone и все примеры работали, не нужно было устанавливать Flash или что-то еще.

Вы хотите / сделать сообщение для своего приложения через http? Если нет, вы можете использовать фреймворк CFNetwork для использования сокетов (TCP / UDP), чтобы ваше приложение и сервер могли общаться. Из того, что я видел в стеке CFNetwork, это довольно круто, и делает его достаточно простым для чтения и записи в streamах и позволяет синхронную и асинхронную связь. Он также позволяет вам определять обратные вызовы в вашем сокете, чтобы вы могли получать уведомления о таких событиях, как полученные данные, сделанное соединение и т. Д. Таким образом, в вашем примере вы могли бы отправить информацию через сокет на ваш сервер, а затем вы могли бы определить который будет прослушивать входящие данные в streamе, а затем обновлять ваше приложение соответственно.

EDIT: Немного больше исследований, и если вы идете в сокет, вы можете также посмотреть classы NSStream. Это абстракции cocoa, построенные поверх материала CFSocket.

вы не упомянули, какой серверный техник вы используете. Но в случае, если это microsoft .net (или для любых других гуглеров, которые сталкиваются с этим), есть простой вариант для кометы: http://www.codeplex.com/ncomet .

COMET, LightStreamer, AJAX весь этот мусор сломан. Это основы TCP, что никакие «keep-alives» никогда не гарантируются, не пинговая трафик. Поэтому вы можете забыть этот длинный опрос, если будет гарантирована какая-либо достойная надежность или своевременная доставка.

Это всего лишь шумиха, которую все видели в 2003 году, когда началась хромая мания.

  • Масштабирование MKMapView для подгонки аннотаций?
  • NSOperation на iPhone
  • Добавление изображений в UITextView
  • Как отправить данные json в запрос Http с помощью NSURLRequest
  • Как проверить локальный Wi-Fi (не только сотовую связь) с помощью iPhone SDK?
  • Может ли iPhone приложение блокировать телефонные звонки?
  • Округленный UIView с использованием CALayers - только некоторые углы - как?
  • Данные о сердечном ритме на яблоне
  • Есть ли способ указать позицию / индекс аргумента в NSString stringWithFormat?
  • Перемещение UIView (изображение и текст)
  • Остановить UIWebView от «подпрыгивания» по вертикали?
  • Давайте будем гением компьютера.