Как я искал, на каком «языке» моя MMO будет говорить с игроками, ч. 3

Как я искал, на каком «языке» моя MMO будет говорить с игроками, ч. 3

Когда начинаешь делать свою онлайн-игру в одиночку, первое, что понимаешь: спросить некого. Я искал на русском, как устроены игровые серверы, — и находил в лучшем случае пару разрозненных статей. Друзей, которые когда-то мечтали со мной о своей игре, рядом уже не было: у всех работа и семьи. Так что разбираться пришлось самому.

Первый же вопрос оказался фундаментальным: как игра вообще будет общаться с сервером?

Разговор, который не прерывается

Обычный сайт работает как письмо: браузер спросил — сервер ответил — разговор закончен. Для игры так нельзя. Монстр подошёл к вам, соседний игрок ударил — сервер должен сам сообщить об этом, не дожидаясь вопроса.

Поэтому я выбрал WebSocket: соединение открывается один раз и держится всё время, пока вы в игре. Сервер и игра могут писать друг другу в любой момент.

Как я искал, на каком «языке» моя MMO будет говорить с игроками, ч. 3

У такого способа есть цена. Каждое сообщение доставляется гарантированно и по порядку, а значит, на проверку доставки уходит время. Есть и другой способ, без гарантий, — им пользуются, например, быстрые шутеры, где потеря пары пакетов не страшна. Для RPG, где важно, дошла ли команда «выпить зелье», я выбрал надёжность.

Как я искал, на каком «языке» моя MMO будет говорить с игроками, ч. 3

Выдержит ли

Дальше был страх, знакомый каждому, кто пишет сервер на «несерьёзном» языке: а вдруг не потянет? Я нашёл большой публичный рейтинг скорости веб-серверов и посмотрел, где там решение на PHP, которое я собирался взять.

Как я искал, на каком «языке» моя MMO будет говорить с игроками, ч. 3

Оно оказалось в самой верхушке: около 350 тысяч запросов в секунду. Помню это облегчение — значит, дорога не тупиковая, можно идти дальше.

Правда, сразу возник следующий вопрос: а сколько игроков на самом деле выдержит такой сервер? Ответ оказался не таким простым, и о нём — в следующей части.

А вы с чего начинали, когда брались за что-то большое в одиночку? Было ли у вас это чувство «спросить некого»?

История:

  1. Введение
  2. Масштабируемость и асинхронность
  3. WebSocket
  4. Redis
  5. LUA и JavaScript
  6. Выбор технологий, протокола и архитектурный шаблон Entity Component System
  7. Игровые локации (тайловые карты)
  8. Клиентская часть на Unity
  9. Игровые серверные механики
  10. Открытый бесшовный мир в 2D игре
  11. FPS, Ping, паузы между командами, интерполяция и экстраполяция
  12. Очереди и параллельное программирование на CPU
  13. Event-driven паттерн, JSON-RPC и почему не сервисная (SOA) архитектура
  14. Сетевая карта и задержка кадра (Latency frame) по RFC 2544 (1242)
  15. Создание сервера для онлайн ММО игр на PHP
  16. Готовое MVP сервиса 2D MMO RPG игр (realtime)
  17. Я научил ИИ делать мою MMO: игровая фича теперь рождается из одного описания
  18. Конвейер контента для MMO: импорт анимации, экипировка и обновление игры без патчей
  19. Каталог ассетов и git: как командой вести игру в облаке
  20. Как я тестирую код, который пишет ИИ: контракты вместо тестов
  21. Бесшовный мир: как карты MMO сшиваются в одно целое
  22. Сколько обходится содержание одного игрока
1122