Upload
guest57eb8a
View
720
Download
2
Embed Size (px)
Citation preview
Клиент-серверные приложения на iPhoneВарианты реализации и анализ эффективности
Vladimir PouzanovCTO at Codeneedle
Vladimir KirillovUkrainian OpenBSD Users Group
Взаимодействие процессов
• Решение задач “общения” процессов на одном хосте или по сети
• Передача данных или RPC
• UNIX Network Programming (Stevens) – библия для сетевого программиста
Транспорт
• Сокеты• Core Foundation
• Cocoa
• Ваша обертка
BSD Sockets
• Системный• Классический API прикладного уровня сетевого стека (OSI 5-7)
• Переносимый• Низкоуровневый• Документация – man -k
socket(2) bind(2) connect(2) accept(2)ip(4) inet(4)
Core Foundation
• Обертка вокруг сокетов BSD (C)
• SSL/TLS через OpenSSL
• DNS resolving
• HTTP/HTTPS
• FTP
• Bonjour
CFNetwork
Cocoa
• Общий механизм для загрузки URL
• FTP, HTTP, HTTPS
• Кеширование• Гибкая настройка через делегаты• Синхронный/асинхронный режимы
NSURLConnection
Полезная нагрузка• Свой формат• JSON
• XML
• Простые структуры• Apple Property List (XML или bplist)
• Сериализация объектов в NSCoding
• RPC
• Distributed Objects
Свой формат
• Полная свобода действий• Необходимость реализовать методы для чтения/записи
• NSXMLParser для обработки XML-данных
• JSON через json-frameworkhttp://code.google.com/p/json-framework/
Property List
• Стабильня XML-схема для описания абстрактных данных
• Поддерживает следующие типы:
• массив (CFArray)
• словарь (CFDictionary)
• строка (CFString)
• данные (CFData, кодируются в base64)
• дата (CFDate)
• булево значение (CFBoolean)
• числа (CFNumber)
plist(5)
Property List
• http://www.apple.com/DTDs/PropertyList-1.0.dtd
• Поддерживаются Cocoa (NSPropertyListSerialization), CoreFoundation, Python (>=2.6), сторониие модули для Ruby, PHP, прочих языков (любой XML-парсер)
• Достаточно объемный результат
Property List
• Бинарный формат существенно компактнее (50%-70%)
• Есть реализация в Cocoa, сторонние библиотеки для Ruby, PHP
• Декодирование происходит быстрее
Демо
NSCoding
• Сериализация полноценных объектов для последующего восстановления
• Может использовать в качестве выходного формата как Property List (NSKeyedArchiver), так и свой бинарный формат (NSArchiver)
• Работает только в Cocoa, CoreFoundation, Cocotron
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
Distributed Objects• Полновесный объектный RPC:
• это просто!• полностью прозрачно
• гибко• надежно (respondsToSelector:)
• Подводные камни:• сложно передать примитивы
(особенно указатели)
• если что-то пойдет не так, прокси-объект бросает исключение
Поиск участников
• Выделенный сервер• Bonjour
• GameKit
Выделенный сервер
• Централизованная модель управления• Необходимость в отдельном сервере и дополнительных алгоритмах взаимодействия
Bonjour
• Поиск клиентов в пределах локальной Wi-Fi сети
• Можно анонсировать несколько разных сервисов
• MAC OS X: можно анонсировать сервисы в глобальном домене MobileMe
GameKit
• Поиск одного клиента через Bluetooth
• Простой и функциональный интерфейс, Apple почти все уже сделала за вас
• Голосовой чат в качестве бесплатного бонуса