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

Vladimir Pouzanov
CTO at Codeneedle
Vladimir Kirillov
Ukrainian OpenBSD Users Group
Взаимодействие
         процессов
• Решение задач “общения” процессов на
  одном хосте или по сети
• Передача данных или RPC
• UNIX Network Programming (Stevens) –
  библия для сетевого программиста
Транспорт

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


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


• Общий механизм для загрузки URL
 • FTP, HTTP, HTTPS
• Кеширование
• Гибкая настройка через делегаты
• Синхронный/асинхронный режимы
Полезная нагрузка
• Свой формат
 • JSON
 • XML
• Простые структуры
 • Apple Property List (XML или bplist)
 • Сериализация объектов в NSCoding
• RPC
 • Distributed Objects
Свой формат
• Полная свобода действий
• Необходимость реализовать методы для
  чтения/записи
• NSXMLParser для обработки XML-
  данных
• JSON через json-framework
             http://code.google.com/p/json-framework/
Property List
                    plist(5)
•   Стабильня XML-схема для описания
    абстрактных данных

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

    •   массив (CFArray)
    •   словарь (CFDictionary)
    •   строка (CFString)
    •   данные (CFData, кодируются в base64)
    •   дата (CFDate)
    •   булево значение (CFBoolean)
    •   числа (CFNumber)
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
     Remote Procedure Call

• rpc(3) (Sun, Mac OS X only?)
 • xdr(3) для инкапсуляции данных
   • eXternal Data Representation
 • так реализован NFS
• Distributed Objects
• XML-RPC, SOAP (Mac OS X only)
Distributed Objects
• Полновесный объектный RPC:
 • это просто!
 • полностью прозрачно
 • гибко
 • надежно (respondsToSelector:)
• Подводные камни:
 • сложно передать примитивы
   (особенно указатели)
 • если что-то пойдет не так, прокси-
   объект бросает исключение
Поиск участников

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

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

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

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




Vladimir Pouzanov
farcaller@gmail.com
Vladimir Kirillov
proger@uaoug.org.ua

More Related Content

What's hot

«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
AvitoTech
 
pgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoverypgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recovery
Михаил Тюрин
 
Перенос данных пользователей Badoo между датацентрами
Перенос данных пользователей Badoo между датацентрамиПеренос данных пользователей Badoo между датацентрами
Перенос данных пользователей Badoo между датацентрами
Alexandr Krasheninnikov
 
NoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинNoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий Никулин
Anatoliy Nikulin
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
Roman Pavlushko
 
Движок LMDB - особенный чемпион
Движок LMDB - особенный чемпионДвижок LMDB - особенный чемпион
Движок LMDB - особенный чемпион
Leonid Yuriev
 
Барнаул15
Барнаул15Барнаул15
Барнаул15
Михаил Тюрин
 
Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.Alexey Rusnak
 
Дмитрий Чирков, "Технологический стартап", занятие 3, 22.03.2012
Дмитрий Чирков, "Технологический стартап", занятие 3, 22.03.2012Дмитрий Чирков, "Технологический стартап", занятие 3, 22.03.2012
Дмитрий Чирков, "Технологический стартап", занятие 3, 22.03.2012ideaperm
 
Tarantool 1.6: NoSQL database and application server
Tarantool 1.6: NoSQL database and application serverTarantool 1.6: NoSQL database and application server
Tarantool 1.6: NoSQL database and application server
Alexander Gornyi
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
03 - Установка Xcode
03 - Установка Xcode03 - Установка Xcode
03 - Установка Xcode
Roman Brovko
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
AvitoTech
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
Andrey Smirnov
 

What's hot (16)

«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
 
pgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoverypgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recovery
 
Перенос данных пользователей Badoo между датацентрами
Перенос данных пользователей Badoo между датацентрамиПеренос данных пользователей Badoo между датацентрами
Перенос данных пользователей Badoo между датацентрами
 
NoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий НикулинNoSQL thumbtack experience, Анатолий Никулин
NoSQL thumbtack experience, Анатолий Никулин
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
 
Движок LMDB - особенный чемпион
Движок LMDB - особенный чемпионДвижок LMDB - особенный чемпион
Движок LMDB - особенный чемпион
 
Devconf15
Devconf15Devconf15
Devconf15
 
Барнаул15
Барнаул15Барнаул15
Барнаул15
 
Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.Couchbase, что за зверь и на что способен.
Couchbase, что за зверь и на что способен.
 
Дмитрий Чирков, "Технологический стартап", занятие 3, 22.03.2012
Дмитрий Чирков, "Технологический стартап", занятие 3, 22.03.2012Дмитрий Чирков, "Технологический стартап", занятие 3, 22.03.2012
Дмитрий Чирков, "Технологический стартап", занятие 3, 22.03.2012
 
Tarantool 1.6: NoSQL database and application server
Tarantool 1.6: NoSQL database and application serverTarantool 1.6: NoSQL database and application server
Tarantool 1.6: NoSQL database and application server
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
03 - Установка Xcode
03 - Установка Xcode03 - Установка Xcode
03 - Установка Xcode
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
Консольные приложения на Go
Консольные приложения на GoКонсольные приложения на Go
Консольные приложения на Go
 

Viewers also liked

Le opportunita' dal territorio grazie al Web Marketing
Le opportunita' dal territorio grazie al Web MarketingLe opportunita' dal territorio grazie al Web Marketing
Le opportunita' dal territorio grazie al Web MarketingEstensa Srl
 
Slide Osservatorio Mari 2012 guida
Slide Osservatorio Mari 2012 guidaSlide Osservatorio Mari 2012 guida
Slide Osservatorio Mari 2012 guidaEstensa Srl
 
Reconstruction Of Veterans Lane Revised Mayhew
Reconstruction Of Veterans Lane Revised MayhewReconstruction Of Veterans Lane Revised Mayhew
Reconstruction Of Veterans Lane Revised Mayhew
mayhew50
 
Internazionalizzazione digitale
Internazionalizzazione digitaleInternazionalizzazione digitale
Internazionalizzazione digitaleEstensa Srl
 
T R A T E E I L M A R E
T R A  T E  E  I L  M A R ET R A  T E  E  I L  M A R E
T R A T E E I L M A R Emllgp
 
Webinar Dymola: Hydraulics and Pneumatics
Webinar Dymola: Hydraulics and PneumaticsWebinar Dymola: Hydraulics and Pneumatics
Webinar Dymola: Hydraulics and Pneumatics
Dofware
 
Webinar dymola-14-settembre-2010
Webinar dymola-14-settembre-2010Webinar dymola-14-settembre-2010
Webinar dymola-14-settembre-2010
Dofware
 
Webinar Dymola: Air conditioning e Powertrain
Webinar Dymola: Air conditioning e PowertrainWebinar Dymola: Air conditioning e Powertrain
Webinar Dymola: Air conditioning e Powertrain
Dofware
 
Msc Crociere B2B2C XML
Msc Crociere B2B2C XMLMsc Crociere B2B2C XML
Msc Crociere B2B2C XML
Estensa Srl
 
Types Of Porous Pavements Final
Types Of Porous Pavements FinalTypes Of Porous Pavements Final
Types Of Porous Pavements Final
mayhew50
 

Viewers also liked (13)

Le opportunita' dal territorio grazie al Web Marketing
Le opportunita' dal territorio grazie al Web MarketingLe opportunita' dal territorio grazie al Web Marketing
Le opportunita' dal territorio grazie al Web Marketing
 
Slide Osservatorio Mari 2012 guida
Slide Osservatorio Mari 2012 guidaSlide Osservatorio Mari 2012 guida
Slide Osservatorio Mari 2012 guida
 
Reconstruction Of Veterans Lane Revised Mayhew
Reconstruction Of Veterans Lane Revised MayhewReconstruction Of Veterans Lane Revised Mayhew
Reconstruction Of Veterans Lane Revised Mayhew
 
Internazionalizzazione digitale
Internazionalizzazione digitaleInternazionalizzazione digitale
Internazionalizzazione digitale
 
T R A T E E I L M A R E
T R A  T E  E  I L  M A R ET R A  T E  E  I L  M A R E
T R A T E E I L M A R E
 
Portfolio Styczen 2010
Portfolio Styczen 2010Portfolio Styczen 2010
Portfolio Styczen 2010
 
Portfolio Sty 2010
Portfolio Sty 2010Portfolio Sty 2010
Portfolio Sty 2010
 
Webinar Dymola: Hydraulics and Pneumatics
Webinar Dymola: Hydraulics and PneumaticsWebinar Dymola: Hydraulics and Pneumatics
Webinar Dymola: Hydraulics and Pneumatics
 
Webinar dymola-14-settembre-2010
Webinar dymola-14-settembre-2010Webinar dymola-14-settembre-2010
Webinar dymola-14-settembre-2010
 
Webinar Dymola: Air conditioning e Powertrain
Webinar Dymola: Air conditioning e PowertrainWebinar Dymola: Air conditioning e Powertrain
Webinar Dymola: Air conditioning e Powertrain
 
Msc Crociere B2B2C XML
Msc Crociere B2B2C XMLMsc Crociere B2B2C XML
Msc Crociere B2B2C XML
 
Portfolio Magdalena Barczak
Portfolio Magdalena BarczakPortfolio Magdalena Barczak
Portfolio Magdalena Barczak
 
Types Of Porous Pavements Final
Types Of Porous Pavements FinalTypes Of Porous Pavements Final
Types Of Porous Pavements Final
 

Similar to Cocoa Networking

Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Andrey Smirnov
 
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновАнатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновOntico
 
Инфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от QlogikИнфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от Qlogik
Expolink
 
Qlogic: Технологии Ethernet
Qlogic: Технологии EthernetQlogic: Технологии Ethernet
Qlogic: Технологии Ethernet
Expolink
 
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаковIBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
Maxim Zinal
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»
e-Legion
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011CodeCamp
 
Эволюция технологий сетевой фабрики ЦОД
Эволюция технологий сетевой фабрики ЦОД Эволюция технологий сетевой фабрики ЦОД
Эволюция технологий сетевой фабрики ЦОД Cisco Russia
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
Taras Lyapun
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Ontico
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
 
андрей паньгин
андрей паньгинандрей паньгин
андрей паньгинkuchinskaya
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
Vasil Remeniuk
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
JSC “Arcadia Inc”
 
Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...
ARCCN
 
Использование SOA для построения сложных веб проектов - Виталий Глибин, PyCon...
Использование SOA для построения сложных веб проектов - Виталий Глибин, PyCon...Использование SOA для построения сложных веб проектов - Виталий Глибин, PyCon...
Использование SOA для построения сложных веб проектов - Виталий Глибин, PyCon...it-people
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
 

Similar to Cocoa Networking (20)

Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
 
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновАнатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей Смирнов
 
Libraries
LibrariesLibraries
Libraries
 
Инфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от QlogikИнфрраструктура ЦОД - интерконнект от Qlogik
Инфрраструктура ЦОД - интерконнект от Qlogik
 
Qlogic: Технологии Ethernet
Qlogic: Технологии EthernetQlogic: Технологии Ethernet
Qlogic: Технологии Ethernet
 
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаковIBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011
 
Эволюция технологий сетевой фабрики ЦОД
Эволюция технологий сетевой фабрики ЦОД Эволюция технологий сетевой фабрики ЦОД
Эволюция технологий сетевой фабрики ЦОД
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
андрей паньгин
андрей паньгинандрей паньгин
андрей паньгин
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
 
Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...
 
Использование SOA для построения сложных веб проектов - Виталий Глибин, PyCon...
Использование SOA для построения сложных веб проектов - Виталий Глибин, PyCon...Использование SOA для построения сложных веб проектов - Виталий Глибин, PyCon...
Использование SOA для построения сложных веб проектов - Виталий Глибин, PyCon...
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 

Cocoa Networking

  • 1. Клиент-серверные приложения на iPhone Варианты реализации и анализ эффективности Vladimir Pouzanov CTO at Codeneedle Vladimir Kirillov Ukrainian OpenBSD Users Group
  • 2. Взаимодействие процессов • Решение задач “общения” процессов на одном хосте или по сети • Передача данных или RPC • UNIX Network Programming (Stevens) – библия для сетевого программиста
  • 3. Транспорт • Сокеты • Core Foundation • Cocoa • Ваша обертка
  • 4. BSD Sockets socket(2) bind(2) connect(2) accept(2) ip(4) inet(4) • Системный • Классический API прикладного уровня сетевого стека (OSI 5-7) • Переносимый • Низкоуровневый • Документация – man -k
  • 5. Core Foundation CFNetwork • Обертка вокруг сокетов BSD (C) • SSL/TLS через OpenSSL • DNS resolving • HTTP/HTTPS • FTP • Bonjour
  • 6. Cocoa NSURLConnection • Общий механизм для загрузки URL • FTP, HTTP, HTTPS • Кеширование • Гибкая настройка через делегаты • Синхронный/асинхронный режимы
  • 7. Полезная нагрузка • Свой формат • JSON • XML • Простые структуры • Apple Property List (XML или bplist) • Сериализация объектов в NSCoding • RPC • Distributed Objects
  • 8. Свой формат • Полная свобода действий • Необходимость реализовать методы для чтения/записи • NSXMLParser для обработки XML- данных • JSON через json-framework http://code.google.com/p/json-framework/
  • 9. Property List plist(5) • Стабильня XML-схема для описания абстрактных данных • Поддерживает следующие типы: • массив (CFArray) • словарь (CFDictionary) • строка (CFString) • данные (CFData, кодируются в base64) • дата (CFDate) • булево значение (CFBoolean) • числа (CFNumber)
  • 10. Property List • http://www.apple.com/DTDs/PropertyList-1.0.dtd • Поддерживаются Cocoa (NSPropertyListSerialization), CoreFoundation, Python (>=2.6), сторониие модули для Ruby, PHP, прочих языков (любой XML-парсер) • Достаточно объемный результат
  • 11. Property List • Бинарный формат существенно компактнее (50%-70%) • Есть реализация в Cocoa, сторонние библиотеки для Ruby, PHP • Декодирование происходит быстрее
  • 13. NSCoding • Сериализация полноценных объектов для последующего восстановления • Может использовать в качестве выходного формата как Property List (NSKeyedArchiver), так и свой бинарный формат (NSArchiver) • Работает только в Cocoa, CoreFoundation, Cocotron
  • 14. RPC Remote Procedure Call • rpc(3) (Sun, Mac OS X only?) • xdr(3) для инкапсуляции данных • eXternal Data Representation • так реализован NFS • Distributed Objects • XML-RPC, SOAP (Mac OS X only)
  • 15. Distributed Objects • Полновесный объектный RPC: • это просто! • полностью прозрачно • гибко • надежно (respondsToSelector:) • Подводные камни: • сложно передать примитивы (особенно указатели) • если что-то пойдет не так, прокси- объект бросает исключение
  • 16. Поиск участников • Выделенный сервер • Bonjour • GameKit
  • 17. Выделенный сервер • Централизованная модель управления • Необходимость в отдельном сервере и дополнительных алгоритмах взаимодействия
  • 18. Bonjour • Поиск клиентов в пределах локальной Wi-Fi сети • Можно анонсировать несколько разных сервисов • MAC OS X: можно анонсировать сервисы в глобальном домене MobileMe
  • 19. GameKit • Поиск одного клиента через Bluetooth • Простой и функциональный интерфейс, Apple почти все уже сделала за вас • Голосовой чат в качестве бесплатного бонуса
  • 20. Спасибо за внимание! Вопросы? Комментарии? Vladimir Pouzanov farcaller@gmail.com Vladimir Kirillov proger@uaoug.org.ua