Cocoa Networking

Preview:

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 почти все уже сделала за вас

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

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

Vladimir Pouzanovfarcaller@gmail.com

Vladimir Kirillovproger@uaoug.org.ua