Привет, Хабр! Мой первый пост и я хочу поделиться с вами своей идеей создание сервиса предоставляющего разработчикам игр и студиям платформу для создания онлайн игр! Поехали!
Зачем?
В большинстве своей при создании онлайн взаимодействия (не пошаговые, не где сервер - это один из клиентов, и не PVP, а прям ММО) в мобильных играх (да и не только) есть несколько путей:
использовать игровой движок в качестве экземпляра сервера (типа тот же UNITY в качестве сервера из коробки или с плагинами типа Mirror) - нужно когда у тебя есть OFFLINE версия игры параллельно (тогда да, иначе никак)
писать свое (те не универсальный, заточенный под игру)
использовать сервис типа https://www.photonengine.com/ (аналог которого я и делаю)
Как было бы здорово если был бы простенький сервис с API , да что и написан был на простом языке типа РНР да и что бы к нему была админ панель, куда можно было бы добавлять карты, предметы, анимации, создавать квесты, редактировать баланс...И что бы это это работало с мобильными приложениями на Android , IOS и игры были прям реалтайм рпг, где все друг друга видят и взаимодействуют, что бы не требовало много ресурсов сервера и работало быстро
Подумал я
разработчик php
Как ?
Посмотрев информацию в интернете (найдя лишь эту https://habr.com/ru/company/vk/blog/220359/ старую статью) про то как строится архитектура программы - сервера (не путайте с клиентами, как делать сами игры статей множество) , открыв русскоязычный youtube (где все пересказывают либо эту статью, либо используют игровой движок как сервер) я полез в англо-саксонский :)
Вот пример Человек делал несколько лет на С# но в итоге все работало настолько медленно что он снял эмоциональное видео "Почему делать мультиплееры игры - КАКАШКА"
Исторически сложилось что такие вещи пишутся на том же языке что сделан клиент (и теми же людьми), те обычно на С#, C++ .... более редко мне кажется на Nodejs (может для браузерок) и Golang (знал бы его - писал на нем).
Что вроде как код должен компилироваться, что все остальное - медленное для пошаговых и однотипных браузеров и не компилируемые языки - не годятся ! C чем я не согласен и вот вам видео почему :)
Не получится?!
Я уже предчувствую желание пролистать вниз к комментариям, рассказать про свой опыт в php и каком то другом языке, рассказать почему именно на нем и только нем надо писать, а все остальное - не будет работать или будет , но медленно :)
Но где эти все технологии ? Мне известен https://www.photonengine.com/ , со сложной документацией, с серьезной работой в клиенте с глубокими познаниями в C# как мне кажется...
Да, php не компилируется , но это капля в море по скорости что забирает сервер (остальное - базы, кеширование, асинхронность, канал связи и тп) ... А с php 7.4 (и далее 8) появились такие вещи как opcache, JIT компиляция ..
В добавок используются такие технологии как Redis, Websocket (UDP / TCP ) и сервис предполагается для 2Д мобильных игр
Я считаю что человеку разрабатывающему клиент для онлайн не должен разбираться в хитросплетениях работы сервера : библиотеки для установления соединения с сервером и API список методов с принимаемыми и возвращаемыми параметрами - достаточно. А Вы ?
В добавок дать разработчикам легкий и понятный ГШ интерфейс для работы с игровым миром, например загрузка карт (отрисованные, например, в программе Tiled https://www.mapeditor.org/) как в видео
Есть результат?
В настоящий момент реализована авторизация, регистрация, загрузка мира (карта с анимациями из админ панели), движение , жизни игрока, смерть игрока , враждебные NPC с поиском пути до игрока минуя объекты и это только начало. Я постоянно придумываю все новые механики и способы убыстрить работу сервера, пример игры на видео:
Буду рад лайку если вам нравится идея моего творчества . Планирую снимать продолжение данной рубрики, где более подробно углубляться в технические аспекты, демонстрировать примеры кода, сравнивать технологии и языки...
Рекомендую прочитать вторую часть серии статей про создание онлайн сервера для игрового проекта
Подписывайтесь на мой профиль что бы не пропустить новые стать
Комментарии (13)
0x9d8e
07.06.2022 10:57+1Я когда-то делал что-то подобное для пет-проджекта, планировал на rust, но прототип сделал на phpReact. В результате оказалось, что именно скорости более чем хватает и в php. При том, что игровая механика вычислялась довольно тяжело (абсолютно всё - сообщение в priority queue "получателя", обрабатывающего эти сообщения по своей собственной логике и порождающего новые сообщения для других игровых объектов и сети). А сложности лежали в плоскости отладки игрового процесса (на сложной карте начинается настоящий хаос, при том хаос асинхронный) и здесь то, от чего защищает rust никак не помогло бы (с типизацией и так всё строго, вместо многопоточности многозадачность). Поэтому оставил так, но несколько выгорел и отложил для лучших времён.
webrobot Автор
07.06.2022 11:18-1Ну про rust сказать ничего не скажу (не работал) , а phpReact брать не стал (тк не понимая как устроен весь механизм Фреймворка сложно найти архитектурное решение лучше. а изучать само ядро фреймворков довольно сложно и удерживать в голове идею создателей)
С самым простеньким сервером (1 ядро 2 гб RAM ) удалось держать ~300 игроков онлайн (роботов которые постоянно ходили и атаковали ближайшую цель следуя за ней искав ближайший путь)
Столкнулся с проблемой когда было куча процессов которые обрабатывали NPC (асинхронных) , решил объединение этих процессов в пулы и стало гораздо лучше
FanatPHP
07.06.2022 11:04+3Посмотрел одно видео. Мне кажется, что Хабр не очень подходит для такого формата. Я понимаю, что это попытка сделать материал легким и ненапряжным, и даже где-то развлекательным, но на мой взгляд получилось скорее вульгарно. Какой-то совсем уж детсадовский юмор. Это чисто моё субъективное мнение, и, возможно, кому-то наоборот понравится. Но чисто по ощущениям — формат не совсем для хабрааудитории.
webrobot Автор
07.06.2022 11:13думаю вы правы. Но информации по теме как "создать cервер для игр с нуля" почти нет, так что для многих (я надеюсь) кто ищет - найдет и оно будет полезно
BIOACE
08.06.2022 20:32Именно эта статья практически не несёт в себе полезной информации.
Вертикальные видео это вообще ужас.
Но на всякий случай всё же подписался и буду следить. Не уверен что у вас получится, но желаю удачи.
webrobot Автор
08.06.2022 20:45Когда я начинал мне было бы полезной информация что есть редактор игровых карт Tiled , что его можно парсить на php и хранить карты в базе что даже если писать на низкоуровневых языках типа C# - это не гарантия успеха и скорости, что рационально использовать Nosql совместно с Sql и тп...
Поэтому посчитал что для начала серии статей (а это именно первая часть из нескольких) стоит начать с этой части :)
Т.е. я стараюсь донести именно архитектурные идеи и описать те логические трудности с которыми предстоит столкнуться ... над подачей еще стоит поработать...
Буду надеется что мое дальнейшее творчество вас не разочарует :)
MegaMANGO
09.06.2022 19:41М-да уж. Во-первых, это не статья, а "прототип" статьи: ещё толком ничего не готово, ноль кода, зато дофига бессмысленных рассуждений. Во-вторых, кто съел все знаки орфографии? В большинстве мест не критично, но есть и моменты, когда реально с первого раза не понятно, что автор хотел тебе сказать (например, секунд 10 тупил на "те": я даже представить себе не мог, что кто-то так называет т.е.)
Ну и в третьих: видосы. Тупо неудобно их смотреть. Это СТАТЬЯ, а не ЮТУБ РОЛИК, почему 90% инфы в видео?
webrobot Автор
09.06.2022 22:27Это первая часть серии статей.
Если вам интересна эта тематика вы можете подписаться на мой профиль и посмотреть следующие части
glebasterBajo
И я не понял, о чем эта статья.
Благословение необходимо на создание? Или что? Или движок уже написан и ...? И что?
Зашел почитать про что-то техническое, в итоге прочитал бред человека под спидами, по видимому.
ПС. Не будИм тебя, как твои коллеги и друзья - спи дальше ...
webrobot Автор
Ну во первых оскорблять людей не хорошо
Во вторых я начал блог о возможности создания сервера игр на php
Ну а в третьих еще в начале указано что хочу делиться идеей.
NemoVors
Ошибки, перескакивание с "вы" на "ты", необходимость смотреть видео для понимания текста. Уберите, пожалуйста, это в черновики и поработайте над текстом.
webrobot Автор
Моя задача была идею донести. А так - это моя манера повествования :)
webrobot Автор
Первый пост - как и писал. С опытом писать лучше научусь