codefest 2013. Бабаев А. — Сервер для самых маленьких
TRANSCRIPT
Сервердля самых маленьких
Шурик Бабаев, DevPocket
Сервер для самых маленькихиз 361
Здравствуйте!
Сервер для самых маленькихиз 362
Кто я? Откуда я?
ДевПокет, Санкт-Петербург
Шурик Бабаев
Сервер для самых маленькихиз 36
На чем?
C++ ⟶ Java, ObjecNve-‐C(а еще C, JavaScript, Groovy, Scala, ML, Racket, Ruby, ...)
Что?Серверы и прикладные приложения(hip://TouchDev.ru и еще несколько проектов)
Некоторые мобильные приложения:
3
Чем я занимаюсь?(Программирую)
Сервер для самых маленькихиз 36
Общие принципы, грабли, плюшки.
4
План
•
•
•
•
•
Зачем нам сервер?
Зачем нам еще один сервер?
На чем писать?
Кто главный?
Сервер для самых маленькихиз 36
Общие принципы, грабли, плюшки.
5
План
•
•
•
•
•
Зачем нам сервер?Зачем нам еще один сервер?
На чем писать?
Кто главный?
Сервер для самых маленькихиз 366
Оффлайновые задачи• Персональные приложения
(«никому не покажу, что я тут пишу»)
• Игры(«ни с кем играть не хочу, сам буду»)
• Связь с «железками»(«управление персональным танком»)
• ... и все?(не совсем, но сильно больше не наковыряешь)
Шурик Бабаев, DevPocketиз 36
Оффлайн
7
Сервер для самых маленькихиз 368
Онлайновые задачи
•Персональные приложения
• Игры
• Связь с «железками»
• ...
Шурик Бабаев, DevPocketиз 36
Онлайн
9
Сервер для самых маленькихиз 3610
Существующие сервисы
• Кто-‐то их сделал за вас (и некоторые даже работают)
• Не нужно поддерживать (но нужно писать багрепорты)
• Готовый API(удобный ли? интересный вопрос)
Шурик Бабаев, DevPocketиз 3611
Сервер для самых маленькихиз 3612
Свой сервис
• Именно то, что нужно (но сначала нужно это создать)
• Правильный API(что очень сильно сказывается на самом приложении)
• Проще развивать(но поддержка стоит денег)
Шурик Бабаев, DevPocketиз 36
Чужие против своих
13
гибкостьденьги
Сервер для самых маленькихиз 3614
Когда нужен свой?
• Обычно, когда нагрузка очень большая(стоимость сервисов ≈ стоимость разработки)
• Нужны уникальные фичи(вы первые, кто додумался)
• Соображения безопасности(или специфические требования к ней)
Сервер для самых маленькихиз 36
•
•
•
•
•
15
План
Общие принципы, грабли, плюшки.
Зачем нам сервер?
Зачем нам еще один сервер?
На чем писать?
Кто главный?
Сервер для самых маленькихиз 3616
А у нас уже есть один!
• обслуживает web-‐страницы(быстро, модно, красиво)
• AJAX(почему бы им тоже не воспользоваться?)
• Ведь два сервера поддерживать нужно!(а вот про это поподробнее...)
Сервер для самых маленькихиз 3617
Один за всех
• HTML(плохо парсится, совсем не вариант)
• XHTML/XML(парсится хорошо, но зачем нам представление?)
• JSON(завязан на структуру страниц, а не мобильных экранов)
Можно? Да. Но мобильная разработкабудет сложнее в разы.
Сервер для самых маленькихиз 3618
К чему стремимся?
СУБД Логика
API
КлиентыСервер
HTML
Сервер для самых маленькихиз 3619
Каждому по интерфейсу
Ничего нового, простите, просто грамотное планирование
или рефакторинг
Сервер для самых маленькихиз 3620
План
•
•
•
•
•
Общие принципы, грабли, плюшки.
Зачем нам сервер?
Зачем нам еще один сервер?
На чем писать?
Кто главный?
Шурик Бабаев, DevPocketиз 36
Картинка
21
Сервер для самых маленькихиз 3622
Обычно все не так
• Сервер уже есть;
• Написан сервер как попало;
• Специалист ушел в другую компанию;
• Сделать нужно быстро;
• Поддержка должна быть недорогой.
Сервер для самых маленькихиз 3623
Протокол
• XML/JSON(хорошая поддержка мобильных платформ)
• Не WebServices/другой RPC(можно, но стандартной поддержки нет)
• Внимание! XML — парсится SAX’ом(атрибуты — удобнее, чем подтэги)
• Мобильный интернет — медленный(один экран — один запрос)
Сервер для самых маленькихиз 3624
XML/JSON
• Готовая поддержка на платформах
• KISS!(DOM часто недоступен, XPath тоже)
• Только для данных(интерфейс должен быть нативный)
• Только для данных
Сервер для самых маленькихиз 3625
Не WebServices
• Очень долго(библиотеку нужно разрабатывать с нуля)
• Излишне длинно(протокол многословный)
• WebServices сделан не для этого!
• Если есть лишние деньги — можно☺
Сервер для самых маленькихиз 3626
SAX
<user><name>Шурик</name><coolness>high</coolness>
</user>
<user name=”Шурик” coolness=”high”/>
• Требует более сложного парсера
• Легко!
Сервер для самых маленькихиз 3627
SAX
<user><name>Шурик</name><coolness>high</coolness>
</user>
<user name=”Шурик” coolness=”high”/>
• Требует более сложного парсера
• Легко!
Сервер для самых маленькихиз 3628
Один на один
• Мобильный интернет медленный(особенно если двигаться)
• Пользователь хочет сейчас!(дольше 10 секунд — долго)
• Один экран — один запрос(один на каркас, остальное по экранам)
Сервер для самых маленькихиз 3629
Один на один
• Запрос, чтобы отобразить текст
• Отдельные — чтобы показать графику
• Загружайте маленькие картинки
Сервер для самых маленькихиз 36
•
•
•
•
•
30
План
Общие принципы, грабли, плюшки.
Зачем нам сервер?
Зачем нам еще один сервер?
На чем писать?
Кто главный?
Сервер для самых маленькихиз 3631
Курица или яйцо?
• тут картинка нада
Сервер для самых маленькихиз 3632
Опыт
• Договориться о протоколе(выше сказано, как будет правильно)
• Реализовать кусочек(чтобы наступить на пару граблей и учесть их)
• Протестировать и поправить
• Повторить по необходимости
Сервер для самых маленькихиз 3633
План
Общие принципы, грабли, плюшки.
•
•
•
•
•
Зачем нам сервер?
Зачем нам еще один сервер?
На чем писать?Кто главный?
Шурик Бабаев, DevPocketиз 36
Налево пойдешь...
34
Сервер для самых маленькихиз 3635
Языки, платформы...
Для мобильного клиентавсё равно
Сервер для самых маленькихиз 3636
Что не все-‐равно
•HTTPS(самый простой способ защиты, хоть и тормозит)
• REST(полезные практики, упрощающие жизнь)
• кросс-‐серверное взаимодействие (для inApp Purchase, например)
• KeepAlive, Pipelining, etc.(у мобильных клиентов — медленный интернет)
Вопросы?
Спасибо!Вам надоедал:Шурик Бабаев
[email protected]://DevPocket.ru hip://TouchDev.ru