3. Кто я? Откуда я?
ДевПокет,
Санкт-Петербург
Шурик Бабаев
2 из 36 Сервер для самых маленьких
4. Чем я занимаюсь?
(Программирую)
На чем?
C++ ⟶ Java, ObjecNve-‐C
(а еще C, JavaScript, Groovy, Scala, ML, Racket, Ruby, ...)
Что?
Серверы и прикладные приложения
(hip://TouchDev.ru и еще несколько проектов)
Некоторые мобильные приложения:
3 из 36 Сервер для самых маленьких
5. План
• Зачем нам сервер?
• Зачем нам еще один сервер?
• Общие принципы, грабли, плюшки.
• Кто главный?
• На чем писать?
4 из 36 Сервер для самых маленьких
6. План
• Зачем нам сервер?
• Зачем нам еще один сервер?
• Общие принципы, грабли, плюшки.
• Кто главный?
• На чем писать?
5 из 36 Сервер для самых маленьких
7. Оффлайновые задачи
• Персональные приложения
(«никому не покажу, что я тут пишу»)
• Игры
(«ни с кем играть не хочу, сам буду»)
• Связь с «железками»
(«управление персональным танком»)
• ... и все?
(не совсем, но сильно больше не наковыряешь)
6 из 36 Сервер для самых маленьких
11. Существующие сервисы
• Кто-‐то их сделал за вас
(и некоторые даже работают)
• Не нужно поддерживать
(но нужно писать багрепорты)
• Готовый API
(удобный ли? интересный вопрос)
10 из 36 Сервер для самых маленьких
13. Свой сервис
• Именно то, что нужно
(но сначала нужно это создать)
• Правильный API
(что очень сильно сказывается на самом приложении)
• Проще развивать
(но поддержка стоит денег)
12 из 36 Сервер для самых маленьких
15. Когда нужен свой?
• Обычно, когда нагрузка очень большая
(стоимость сервисов ≈ стоимость разработки)
• Нужны уникальные фичи
(вы первые, кто додумался)
• Соображения безопасности
(или специфические требования к ней)
14 из 36 Сервер для самых маленьких
16. План
• Зачем нам сервер?
• Зачем нам еще один сервер?
• Общие принципы, грабли, плюшки.
• Кто главный?
• На чем писать?
15 из 36 Сервер для самых маленьких
17. А у нас уже есть один!
• обслуживает web-‐страницы
(быстро, модно, красиво)
• AJAX
(почему бы им тоже не воспользоваться?)
• Ведь два сервера поддерживать нужно!
(а вот про это поподробнее...)
16 из 36 Сервер для самых маленьких
18. Один за всех
• HTML
(плохо парсится, совсем не вариант)
• XHTML/XML
(парсится хорошо, но зачем нам представление?)
• JSON
(завязан на структуру страниц, а не мобильных экранов)
Можно? Да. Но мобильная разработка
будет сложнее в разы.
17 из 36 Сервер для самых маленьких
19. К чему стремимся?
Сервер Клиенты
СУБД Логика
API
HTML
18 из 36 Сервер для самых маленьких
20. Каждому по интерфейсу
Ничего нового, простите, просто
грамотное планирование
или рефакторинг
19 из 36 Сервер для самых маленьких
21. План
• Зачем нам сервер?
• Зачем нам еще один сервер?
• Общие принципы, грабли, плюшки.
• Кто главный?
• На чем писать?
20 из 36 Сервер для самых маленьких
23. Обычно все не так
• Сервер уже есть;
• Написан сервер как попало;
• Специалист ушел в другую компанию;
• Сделать нужно быстро;
• Поддержка должна быть недорогой.
22 из 36 Сервер для самых маленьких
24. Протокол
• XML/JSON
(хорошая поддержка мобильных платформ)
• Не WebServices/другой RPC
(можно, но стандартной поддержки нет)
• Внимание! XML — парсится SAX’ом
(атрибуты — удобнее, чем подтэги)
• Мобильный интернет — медленный
(один экран — один запрос)
23 из 36 Сервер для самых маленьких
25. XML/JSON
• Готовая поддержка на платформах
• KISS!
(DOM часто недоступен, XPath тоже)
• Только для данных
(интерфейс должен быть нативный)
• Только для данных
24 из 36 Сервер для самых маленьких
26. Не WebServices
• Очень долго
(библиотеку нужно разрабатывать с нуля)
• Излишне длинно
(протокол многословный)
• WebServices сделан не для этого!
• Если есть лишние деньги — можно☺
25 из 36 Сервер для самых маленьких
27. SAX
<user>
<user
<name>Шурик</name>
name=”Шурик”
<coolness>high</coolness>
coolness=”high”/>
</user>
• Требует более • Легко!
сложного парсера
26 из 36 Сервер для самых маленьких
28. SAX
<user>
<user
<name>Шурик</name>
name=”Шурик”
<coolness>high</coolness>
coolness=”high”/>
</user>
• Требует более • Легко!
сложного парсера
27 из 36 Сервер для самых маленьких
29. Один на один
• Мобильный интернет медленный
(особенно если двигаться)
• Пользователь хочет сейчас!
(дольше 10 секунд — долго)
• Один экран — один запрос
(один на каркас, остальное по экранам)
28 из 36 Сервер для самых маленьких
30. Один на один
• Запрос, чтобы
отобразить текст
• Отдельные — чтобы
показать графику
• Загружайте
маленькие картинки
29 из 36 Сервер для самых маленьких
31. План
• Зачем нам сервер?
• Зачем нам еще один сервер?
• Общие принципы, грабли, плюшки.
• Кто главный?
• На чем писать?
30 из 36 Сервер для самых маленьких
32. Курица или яйцо?
• тут картинка нада
31 из 36 Сервер для самых маленьких
33. Опыт
• Договориться о протоколе
(выше сказано, как будет правильно)
• Реализовать кусочек
(чтобы наступить на пару граблей и учесть их)
• Протестировать и поправить
• Повторить по необходимости
32 из 36 Сервер для самых маленьких
34. План
• Зачем нам сервер?
• Зачем нам еще один сервер?
• Общие принципы, грабли, плюшки.
• Кто главный?
• На чем писать?
33 из 36 Сервер для самых маленьких
37. Что не все-‐равно
• HTTPS
(самый простой способ защиты, хоть и тормозит)
• REST
(полезные практики, упрощающие жизнь)
• кросс-‐серверное взаимодействие
(для inApp Purchase, например)
• KeepAlive, Pipelining, etc.
(у мобильных клиентов — медленный интернет)
36 из 36 Сервер для самых маленьких