Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Взаимодействие процессов • Решение задач “общения” процессов на одном хосте или по сети • Передача данных или RPC • UNIX Network Programming (Stevens) – библия для сетевого программиста

Slide 3

Slide 3 text

Транспорт • Сокеты • Core Foundation • Cocoa • Ваша обертка

Slide 4

Slide 4 text

BSD Sockets • Системный • Классический API прикладного уровня сетевого стека (OSI 5-7) • Переносимый • Низкоуровневый • Документация – man -k socket(2) bind(2) connect(2) accept(2) ip(4) inet(4)

Slide 5

Slide 5 text

Core Foundation • Обертка вокруг сокетов BSD (C) • SSL/TLS через OpenSSL • DNS resolving • HTTP/HTTPS • FTP • Bonjour CFNetwork

Slide 6

Slide 6 text

Cocoa • Общий механизм для загрузки URL • FTP, HTTP, HTTPS • Кеширование • Гибкая настройка через делегаты • Синхронный/асинхронный режимы NSURLConnection

Slide 7

Slide 7 text

Полезная нагрузка • Свой формат • JSON • XML • Простые структуры • Apple Property List (XML или bplist) • Сериализация объектов в NSCoding • RPC • Distributed Objects

Slide 8

Slide 8 text

Свой формат • Полная свобода действий • Необходимость реализовать методы для чтения/записи • NSXMLParser для обработки XML- данных • JSON через json-framework http://code.google.com/p/json-framework/

Slide 9

Slide 9 text

Property List • Стабильня XML-схема для описания абстрактных данных • Поддерживает следующие типы: • массив (CFArray) • словарь (CFDictionary) • строка (CFString) • данные (CFData, кодируются в base64) • дата (CFDate) • булево значение (CFBoolean) • числа (CFNumber) plist(5)

Slide 10

Slide 10 text

Property List • http://www.apple.com/DTDs/PropertyList-1.0.dtd • Поддерживаются Cocoa (NSPropertyListSerialization), CoreFoundation, Python (>=2.6), сторониие модули для Ruby, PHP, прочих языков (любой XML-парсер) • Достаточно объемный результат

Slide 11

Slide 11 text

Property List • Бинарный формат существенно компактнее (50%-70%) • Есть реализация в Cocoa, сторонние библиотеки для Ruby, PHP • Декодирование происходит быстрее

Slide 12

Slide 12 text

Демо

Slide 13

Slide 13 text

NSCoding • Сериализация полноценных объектов для последующего восстановления • Может использовать в качестве выходного формата как Property List (NSKeyedArchiver), так и свой бинарный формат (NSArchiver) • Работает только в Cocoa, CoreFoundation, Cocotron

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Distributed Objects • Полновесный объектный RPC • вызов селекторов на удаленных объектах • Подводные камни

Slide 16

Slide 16 text

Поиск участников • Выделенный сервер • Bonjour • GameKit

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Bonjour • Поиск клиентов в пределах локальной Wi-Fi сети • Можно анонсировать несколько разных сервисов • MAC OS X: можно анонсировать сервисы в глобальном домене MobileMe

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Спасибо за внимание! Вопросы? Комментарии? Vladimir Pouzanov [email protected] Vladimir Kirillov [email protected]