Я ищу совет о том, как лучше реализовать двунаправленную связь между «серверным» приложением, написанным на Objective-C и работающим на Mac, и клиентским приложением, работающим на iPhone. ,
Короче говоря, я адаптирую существующую библиотеку для использования в среде клиент-сервер. Библиотека (которая работает на сервере) в основном представляет собой поисковую систему, которая предоставляет периодические результаты, и дополнительно может предоставлять обновления для любого из этих результатов позднее. Поэтому в моем идеальном мире я смог бы достичь следующего с помощью своего гипотетического сетевого решения:
- Запуск запросов на сервере.
- Пусть сервер "отправит" результаты клиенту по мере их поступления.
- Пусть сервер "отправит" обновления отдельных результатов клиенту по мере их поступления.
Если бы я писал этот клиент для запуска на другом Mac, я вполне мог бы использовать Распределенные объекты , чтобы замаскировать тот факт, что сервер фактически работал удаленно, но DO недоступен на iPhone.
Если бы я писал более общее клиент-серверное приложение, я бы, вероятно, посмотрел бы на использование HTTP для обеспечения некоторого RESTful-интерфейса для поиска, но это решение не подходит для асинхронных обновлений и, кроме того, то, что я предлагаю, не делает хорошо вписывается в "REST" без учета состояния: мне нужно смоделировать свой протокол, чтобы я "создал" ресурс поиска, который впоследствии мог бы запрашивать состояние, и мне пришлось бы запрашивать обновления для него.
Одним из предложений, сделанных кем-то, было использование чего-то вроде BLIP , чтобы предоставить мне двусторонний канал между клиентом и сервером и реализовать мои собственные объекты типа «прокси» для серверной стороны. ресурсы, которые знали, как получать данные с сервера и, кроме того, были адресуемыми, чтобы сервер мог отправлять на них обновления. Хотя BLIP предоставляет низкоуровневую структуру обмена сообщениями, необходимую для двунаправленной связи, она все еще оставляет мне несколько вопросов:
- Как я буду управлять временем жизни объектов на сервере? Я могу иметь тип сообщения, который «создает» объект поиска, но когда этот объект должен быть уничтожен?
- Насколько хорошо это работает на iPhone: если у меня постоянное соединение с сервером, это слишком быстро разряжает батареи? Этот вопрос также актуален в мире HTTP: большинство асинхронных обновлений выполняется с помощью хака типа COMET, который снова требует постоянного соединения.
Так что сейчас я все еще не совсем уверен, каков наилучший путь: я много искал и читал, но не нашел решения. Я спрашиваю здесь об этом, потому что я уверен, что многие из вас уже решили эту проблему.
Как вы достигли создания двунаправленной сети в реальном времени между iPhone и серверным приложением Objective-C?