Обновить
16K+
20
Стрельцов Михаил@webrobot

IT архитектор, PHP developer, разработчик игр

11
Рейтинг
59
Подписчики
Отправить сообщение

ИИ-картограф: как карты сшиваются в бесшовный мир — тулсеты (toolsets) для MMORPG игр на PHP, ч. 21

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели8.9K

Я сшил разрозненные карты MMO в один бесшовный мир: игрок выходит из города в пустыню и не замечает, что под ним уже работает другой сервер. А всю рутину картографа — импорт, разметку препятствий, разрезание карт и проверку связей — отдаю ИИ. Заодно проверил, что происходит, если доверить ему игровую графику

Читать далее

Тесты для кода, который пишет ИИ: контракты вместо ассертов — создание сервера для онлайн ММО игр на PHP, ч. 20

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели9.2K

Половину контрактов моего игрового сервера нельзя записать ассертом: исход живёт в ответе живого процесса, в разметке страницы и в кадре игры. Я записал их таблицами «дано → действие → ожидание», а прогоняет их агент. Рассказываю, как устроен контур проверки кода, который пишет ИИ: контракты вместо юнит-тестов, ревью, где находку надо доказать, и граница, за которую машину не пускают.

Читать далее

Каталог ассетов и git для MMO: как командой вести игру в облаке — создание сервера для онлайн ММО игр на PHP, ч. 19

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели12K

Над одной игрой работает команда: люди правят контент в браузере, ИИ — через тот же сервис, локально разворачивать ничего не нужно. Каждый ассет живёт своим git-репозиторием: это и бэкап, и способ собрать игру из готовых анимаций, карт и библиотек — а перед тем как правки уедут в мир, видно построчно, что именно уйдёт.

Читать далее

ч. 18 — Конвейер контента для MMO: импорт анимации, экипировка и обновление игры без патчей

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели14K

ИИ сегодня умеет рисовать персонажей и делать для них анимации. Но это только половина задачи. Их ещё нужно встроить в игру: импортировать, связать с игровой логикой, привязать экипировку, разместить в мире и доставить игрокам без обновления клиента. В этой части показываю, как этот конвейер работает у меня.

Читать далее

Создание сервера для онлайн ММО игр на PHP ч. 17 — внедряю ИИ: механики из одного описания

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели15K

Несколько лет я в одиночку пишу сервер для своей 2D MMO RPG. Эта часть — про то, как изменился сам процесс разработки: игровую фичу я по-прежнему придумываю сам, а реализую её уже не один.

Это не демо в духе «модель выдала сниппет». Внутри — настоящая 2D MMO RPG: авторитарный сервер реального времени, тайловые карты, клиент на Unity. ИИ не создал эту систему, а ускорил: то, что раньше занимало дни и недели, теперь укладывается в часы и дни, и в одиночку я держу темп целой команды. Расскажу по порядку, как я к этому пришёл и где у подхода честная граница.

Читать далее

MVP авторитарного сервера для 2D MMO: три года и что получилось — создание сервера для онлайн ММО игр на PHP, ч. 16

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели3.8K

Готового сервиса для 2D MMO не нашлось ни в России, ни за рубежом — существующие рассчитаны на сессионные игры. Показываю, что собралось за три года: редактор механик, редактор существ, импорт карт, горизонтальное масштабирование и замеры, по которым видно, сколько игроков тянет одна машина.

Читать далее

Почему сервер собран на процессах, а не на потоках — создание сервера для онлайн ММО игр на PHP, ч. 15

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели4.3K

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

Читать далее

Не размер пакета: где на самом деле узкое место сетевого сервера — создание сервера для онлайн ММО игр на PHP, ч. 14

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели4.9K

Разработку сервера часто начинают с экономии байтов: UDP ради коротких заголовков, команды в флагах, сжатие. А один процесс не успевает вычитать и десятой части принятого сетевой картой. Разбираю, где на самом деле узкое место и что стоит решать первым.

Читать далее

Event-driven и JSON-RPC: почему игровой сервер не собран из сервисов — создание сервера для онлайн ММО игр на PHP, ч. 13

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели5.2K

Событийную архитектуру часто собирают вслепую, не зная, что у неё есть имя. Разбираю на схемах, как event-driven ложится на авторитарный игровой сервер, при чём тут JSON-RPC и почему сетевой и расчётный процессы не стали независимыми сервисами.

Читать далее

Очереди без RabbitMQ: обмен между процессами в памяти — создание сервера для онлайн ММО игр на PHP, ч. 12

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели4.6K

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

Читать далее

Почему персонаж телепортируется: пинг, интерполяция и экстраполяция — создание сервера для онлайн ММО игр на PHP, ч. 11

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.5K

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

Читать далее

Бесшовный мир в 2D MMO: локации на разных машинах — создание сервера для онлайн ММО игр на PHP, ч. 10

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели5.9K

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

Читать далее

Игровые механики без обновления клиента: события на сервере — создание сервера для онлайн ММО игр на PHP, ч. 9

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели5.8K

Механика на авторитарном сервере — это событие на игровом объекте: у него есть очередь, время срабатывания, параметры и код, меняющий состояние мира. Показываю, как такие события описываются в веб-панели и почему их правка не требует пересобирать клиент.

Читать далее

Клиент на Unity для авторитарного сервера: что он обязан уметь — создание сервера для онлайн ММО игр на PHP, ч. 8

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели3.3K

Сервер считает мир сам, клиент только показывает его и шлёт команды. Разбираю, что при этом обязан уметь клиент на Unity: держать постоянное соединение на ПК, мобильных и в браузере, переживать переход между локациями и не врать игроку при задержке сети.

Читать далее

Тайловые карты: импорт локаций из Tiled одной строкой — создание сервера для онлайн ММО игр на PHP, ч. 7

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели3.5K

Карта в 2D MMO — не картинка, а сетка тайлов с непроходимыми областями, объектами и анимацией. Показываю, как редактор Tiled отдаёт её в XML и как импорт такого файла в базу игрового сервера сводится к одной строке кода на PHP.

Читать далее

Выбор технологий и ECS: почему архитектура быстрее языка — создание сервера для онлайн ММО игр на PHP, ч. 6

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели5.7K

Сервер упирается в пятьсот игроков — и начинается перебор технологий: UDP вместо TCP, Node.js, Redis, очереди. Разбираю, почему ни одна из них не спасает плохую архитектуру, и показываю сущностно-компонентную схему, на которой держится сервер.

Читать далее

Lua или JavaScript в песочнице: чей код быстрее на сервере — создание сервера для онлайн ММО игр на PHP, ч. 5

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели5.1K

Игровые механики должны писать пользователи, но чужой код нельзя просто выполнить на сервере: одна бесконечная петля — и мир встал у всех разом. Сравниваю две песочницы для PHP, Lua и JavaScript, с замерами от 60 тысяч до 700 тысяч вызовов в секунду.

Читать далее

Redis как память игрового мира: сколько игроков и NPC он держит — создание сервера для онлайн ММО игр на PHP, ч. 4

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели7.2K

Игровому серверу нужна общая память: игроки и NPC читают и пишут одно состояние мира десятки тысяч раз в секунду. Разбираю, почему выбор пал на Redis, где проходит его потолок и как это уживается с требованием держать пинг в 60 миллисекунд.

Читать далее

Почему игровому серверу нужен WebSocket, а не HTTP — создание сервера для онлайн ММО игр на PHP, ч. 3

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели6K

HTTP-запрос заканчивается вместе с ответом — игровому серверу этого мало: он должен слать данные сам, не дожидаясь просьбы клиента. Разбираю, что даёт постоянное соединение поверх TCP, чем за него платишь и сколько запросов в секунду вытягивает демон на PHP.

Читать далее

Почему одного процесса не хватит: асинхронность и масштаб — создание сервера для онлайн ММО игр на PHP, ч. 2

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели5K

Сервер считает ход игрока за 5–10 миллисекунд. Пока он занят одним, остальные ждут: при сотне игроков последний получает ответ почти через секунду. Разбираю, как PHP-сервер обслуживает всех сразу и во что это обходится по памяти и процессору.

Читать далее
1

Информация

В рейтинге
803-й
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Разработчик игр
Старший
PHP
MySQL
Git
Высоконагруженные системы
C#
Unity3d
Разработка игр
Redis
ООП
SQL