20
Клиент-серверные приложения на iPhone Варианты реализации и анализ эффективности Vladimir Pouzanov CTO at Codeneedle Vladimir Kirillov Ukrainian OpenBSD Users Group

Cocoa Networking

Embed Size (px)

Citation preview

Page 1: Cocoa Networking

Клиент-серверные приложения на iPhoneВарианты реализации и анализ эффективности

Vladimir PouzanovCTO at Codeneedle

Vladimir KirillovUkrainian OpenBSD Users Group

Page 2: Cocoa Networking

Взаимодействие процессов

• Решение задач “общения” процессов на одном хосте или по сети

• Передача данных или RPC

• UNIX Network Programming (Stevens) – библия для сетевого программиста

Page 3: Cocoa Networking

Транспорт

• Сокеты• Core Foundation

• Cocoa

• Ваша обертка

Page 4: Cocoa Networking

BSD Sockets

• Системный• Классический API прикладного уровня сетевого стека (OSI 5-7)

• Переносимый• Низкоуровневый• Документация – man -k

socket(2) bind(2) connect(2) accept(2)ip(4) inet(4)

Page 5: Cocoa Networking

Core Foundation

• Обертка вокруг сокетов BSD (C)

• SSL/TLS через OpenSSL

• DNS resolving

• HTTP/HTTPS

• FTP

• Bonjour

CFNetwork

Page 6: Cocoa Networking

Cocoa

• Общий механизм для загрузки URL

• FTP, HTTP, HTTPS

• Кеширование• Гибкая настройка через делегаты• Синхронный/асинхронный режимы

NSURLConnection

Page 7: Cocoa Networking

Полезная нагрузка• Свой формат• JSON

• XML

• Простые структуры• Apple Property List (XML или bplist)

• Сериализация объектов в NSCoding

• RPC

• Distributed Objects

Page 8: Cocoa Networking

Свой формат

• Полная свобода действий• Необходимость реализовать методы для чтения/записи

• NSXMLParser для обработки XML-данных

• JSON через json-frameworkhttp://code.google.com/p/json-framework/

Page 9: Cocoa Networking

Property List

• Стабильня XML-схема для описания абстрактных данных

• Поддерживает следующие типы:

• массив (CFArray)

• словарь (CFDictionary)

• строка (CFString)

• данные (CFData, кодируются в base64)

• дата (CFDate)

• булево значение (CFBoolean)

• числа (CFNumber)

plist(5)

Page 10: Cocoa Networking

Property List

• http://www.apple.com/DTDs/PropertyList-1.0.dtd

• Поддерживаются Cocoa (NSPropertyListSerialization), CoreFoundation, Python (>=2.6), сторониие модули для Ruby, PHP, прочих языков (любой XML-парсер)

• Достаточно объемный результат

Page 11: Cocoa Networking

Property List

• Бинарный формат существенно компактнее (50%-70%)

• Есть реализация в Cocoa, сторонние библиотеки для Ruby, PHP

• Декодирование происходит быстрее

Page 12: Cocoa Networking

Демо

Page 13: Cocoa Networking

NSCoding

• Сериализация полноценных объектов для последующего восстановления

• Может использовать в качестве выходного формата как Property List (NSKeyedArchiver), так и свой бинарный формат (NSArchiver)

• Работает только в Cocoa, CoreFoundation, Cocotron

Page 14: Cocoa Networking

RPC

• rpc(3) (Sun, Mac OS X only?)

• xdr(3) для инкапсуляции данных

• eXternal Data Representation

• так реализован NFS

•Distributed Objects

• XML-RPC, SOAP (Mac OS X only)

Remote Procedure Call

Page 15: Cocoa Networking

Distributed Objects• Полновесный объектный RPC:

• это просто!• полностью прозрачно

• гибко• надежно (respondsToSelector:)

• Подводные камни:• сложно передать примитивы

(особенно указатели)

• если что-то пойдет не так, прокси-объект бросает исключение

Page 16: Cocoa Networking

Поиск участников

• Выделенный сервер• Bonjour

• GameKit

Page 17: Cocoa Networking

Выделенный сервер

• Централизованная модель управления• Необходимость в отдельном сервере и дополнительных алгоритмах взаимодействия

Page 18: Cocoa Networking

Bonjour

• Поиск клиентов в пределах локальной Wi-Fi сети

• Можно анонсировать несколько разных сервисов

• MAC OS X: можно анонсировать сервисы в глобальном домене MobileMe

Page 19: Cocoa Networking

GameKit

• Поиск одного клиента через Bluetooth

• Простой и функциональный интерфейс, Apple почти все уже сделала за вас

• Голосовой чат в качестве бесплатного бонуса

Page 20: Cocoa Networking

Спасибо за внимание!Вопросы? Комментарии?

Vladimir [email protected]

Vladimir [email protected]