CodeFest 2013. Бабаев А. — Сервер для самых маленьких

39
Сервер для самых маленьких Шурик Бабаев, DevPocket

Transcript of CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Page 1: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервердля  самых  маленьких

Шурик  Бабаев,  DevPocket

Page 2: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  361

Здравствуйте!

Page 3: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  362

Кто  я?  Откуда  я?

ДевПокет, Санкт-Петербург

Шурик Бабаев

Page 4: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  36

На  чем?

C++  ⟶  Java,  ObjecNve-­‐C(а  еще  C,  JavaScript,  Groovy,  Scala,  ML,  Racket,  Ruby,  ...)

Что?Серверы  и  прикладные  приложения(hip://TouchDev.ru  и  еще  несколько  проектов)

Некоторые  мобильные  приложения:

3

Чем  я  занимаюсь?(Программирую)

Page 5: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  36

Общие  принципы,  грабли,  плюшки.

4

План

•  

•  

•  

•  

•  

Зачем  нам  сервер?

Зачем  нам  еще  один  сервер?

На  чем  писать?

Кто  главный?

Page 6: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  36

Общие  принципы,  грабли,  плюшки.

5

План

•  

•  

•  

•  

•  

Зачем  нам  сервер?Зачем  нам  еще  один  сервер?

На  чем  писать?

Кто  главный?

Page 7: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  366

Оффлайновые  задачи• Персональные  приложения

(«никому  не  покажу,  что  я  тут  пишу»)

• Игры(«ни  с  кем  играть  не  хочу,  сам  буду»)

• Связь  с  «железками»(«управление  персональным  танком»)

• ...  и  все?(не  совсем,  но  сильно  больше  не  наковыряешь)

Page 8: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Шурик  Бабаев,  DevPocketиз  36

Оффлайн

7

Page 9: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  368

Онлайновые  задачи

•Персональные  приложения

• Игры

• Связь  с  «железками»

• ...  

Page 10: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Шурик  Бабаев,  DevPocketиз  36

Онлайн

9

Page 11: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3610

Существующие  сервисы

• Кто-­‐то  их  сделал  за  вас  (и  некоторые  даже  работают)

• Не  нужно  поддерживать  (но  нужно  писать  багрепорты)

• Готовый  API(удобный  ли?  интересный  вопрос)

Page 12: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Шурик  Бабаев,  DevPocketиз  3611

Page 13: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3612

Свой  сервис

• Именно  то,  что  нужно  (но  сначала  нужно  это  создать)

• Правильный  API(что  очень  сильно  сказывается  на  самом  приложении)

• Проще  развивать(но  поддержка  стоит  денег)

Page 14: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Шурик  Бабаев,  DevPocketиз  36

Чужие  против  своих

13

гибкостьденьги

Page 15: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3614

Когда  нужен  свой?

• Обычно,  когда  нагрузка  очень  большая(стоимость  сервисов  ≈  стоимость  разработки)

• Нужны  уникальные  фичи(вы  первые,  кто  додумался)

• Соображения  безопасности(или  специфические  требования  к  ней)

Page 16: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  36

•  

•  

•  

•  

•  

15

План

Общие  принципы,  грабли,  плюшки.

Зачем  нам  сервер?

Зачем  нам  еще  один  сервер?

На  чем  писать?

Кто  главный?

Page 17: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3616

А  у  нас  уже  есть  один!

• обслуживает  web-­‐страницы(быстро,  модно,  красиво)

• AJAX(почему  бы  им  тоже  не  воспользоваться?)

• Ведь  два  сервера  поддерживать  нужно!(а  вот  про  это  поподробнее...)

Page 18: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3617

Один  за  всех

• HTML(плохо  парсится,  совсем  не  вариант)

• XHTML/XML(парсится  хорошо,  но  зачем  нам  представление?)

• JSON(завязан  на  структуру  страниц,  а  не  мобильных  экранов)

Можно?  Да.  Но  мобильная  разработкабудет  сложнее  в  разы.

Page 19: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3618

К  чему  стремимся?

СУБД Логика

API

КлиентыСервер

HTML

Page 20: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3619

Каждому  по  интерфейсу

Ничего  нового,  простите,  просто  грамотное  планирование

или  рефакторинг

Page 21: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3620

План

•  

•  

•  

•  

•  

Общие  принципы,  грабли,  плюшки.

Зачем  нам  сервер?

Зачем  нам  еще  один  сервер?

На  чем  писать?

Кто  главный?

Page 22: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Шурик  Бабаев,  DevPocketиз  36

Картинка

21

Page 23: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3622

Обычно  все  не  так

• Сервер  уже  есть;

• Написан  сервер  как  попало;

• Специалист  ушел  в  другую  компанию;

• Сделать  нужно  быстро;

• Поддержка  должна  быть  недорогой.

Page 24: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3623

Протокол

• XML/JSON(хорошая  поддержка  мобильных  платформ)

• Не  WebServices/другой  RPC(можно,  но  стандартной  поддержки  нет)

• Внимание!  XML  —  парсится  SAX’ом(атрибуты  —  удобнее,  чем  подтэги)

• Мобильный  интернет  —  медленный(один  экран  —  один  запрос)

Page 25: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3624

XML/JSON

• Готовая  поддержка  на  платформах

• KISS!(DOM  часто  недоступен,  XPath  тоже)

• Только  для  данных(интерфейс  должен  быть  нативный)

• Только  для  данных

Page 26: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3625

Не  WebServices

• Очень  долго(библиотеку  нужно  разрабатывать  с  нуля)

• Излишне  длинно(протокол  многословный)

• WebServices  сделан  не  для  этого!

• Если  есть  лишние  деньги  —  можно☺

Page 27: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3626

SAX

<user><name>Шурик</name><coolness>high</coolness>

</user>

<user  name=”Шурик”  coolness=”high”/>

• Требует  более  сложного  парсера

• Легко!

Page 28: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3627

SAX

<user><name>Шурик</name><coolness>high</coolness>

</user>

<user  name=”Шурик”  coolness=”high”/>

• Требует  более  сложного  парсера

• Легко!

Page 29: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3628

Один  на  один

• Мобильный  интернет  медленный(особенно  если  двигаться)

• Пользователь  хочет  сейчас!(дольше  10  секунд  —  долго)

• Один  экран  —  один  запрос(один  на  каркас,  остальное  по  экранам)

Page 30: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3629

Один  на  один

• Запрос,  чтобы  отобразить  текст

• Отдельные  —  чтобы  показать  графику

• Загружайте  маленькие  картинки

Page 31: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  36

•  

•  

•  

•  

•  

30

План

Общие  принципы,  грабли,  плюшки.

Зачем  нам  сервер?

Зачем  нам  еще  один  сервер?

На  чем  писать?

Кто  главный?

Page 32: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3631

Курица  или  яйцо?

• тут  картинка  нада

Page 33: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3632

Опыт

• Договориться  о  протоколе(выше  сказано,  как  будет  правильно)

• Реализовать  кусочек(чтобы  наступить  на  пару  граблей  и  учесть  их)

• Протестировать  и  поправить

• Повторить  по  необходимости

Page 34: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3633

План

Общие  принципы,  грабли,  плюшки.

•  

•  

•  

•  

•  

Зачем  нам  сервер?

Зачем  нам  еще  один  сервер?

На  чем  писать?Кто  главный?

Page 35: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Шурик  Бабаев,  DevPocketиз  36

Налево  пойдешь...

34

Page 36: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3635

Языки,  платформы...

Для  мобильного  клиентавсё  равно

Page 37: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Сервер  для  самых  маленькихиз  3636

Что  не  все-­‐равно

•HTTPS(самый  простой  способ  защиты,  хоть  и  тормозит)

• REST(полезные  практики,  упрощающие  жизнь)

• кросс-­‐серверное  взаимодействие  (для  inApp  Purchase,  например)

• KeepAlive,  Pipelining,  etc.(у  мобильных  клиентов  —  медленный  интернет)

Page 38: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Вопросы?

Page 39: CodeFest 2013. Бабаев А. — Сервер для самых маленьких

Спасибо!Вам  надоедал:Шурик  Бабаев

[email protected]://DevPocket.ru  hip://TouchDev.ru