Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Можно ли использовать обычный сокет 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-адрес на самом деле, например, www.foo.com, а не IP-адрес www.foo.com). И предел - 2 соединения. Кроме того, браузер разрешает только соединения AJAX с тем же сервером, с которого была загружена основная страница HTML.

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

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