Привет, Хабр! Мой первый пост и я хочу поделиться с вами своей идеей создание сервиса предоставляющего разработчикам игр и студиям платформу для создания онлайн игр! Поехали!

Зачем?

В большинстве своей при создании онлайн взаимодействия (не пошаговые, не где сервер - это один из клиентов, и не 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)


  1. glebasterBajo
    07.06.2022 09:44
    +1

    И я не понял, о чем эта статья.
    Благословение необходимо на создание? Или что? Или движок уже написан и ...? И что?

    Зашел почитать про что-то техническое, в итоге прочитал бред человека под спидами, по видимому.

    ПС. Не будИм тебя, как твои коллеги и друзья - спи дальше ...


    1. webrobot Автор
      07.06.2022 10:19
      -1

      Ну во первых оскорблять людей не хорошо

      Во вторых я начал блог о возможности создания сервера игр на php

      Ну а в третьих еще в начале указано что хочу делиться идеей.


      1. NemoVors
        07.06.2022 10:25
        +1

        Ошибки, перескакивание с "вы" на "ты", необходимость смотреть видео для понимания текста. Уберите, пожалуйста, это в черновики и поработайте над текстом.


        1. webrobot Автор
          07.06.2022 10:28
          -4

          Моя задача была идею донести. А так - это моя манера повествования :)


        1. webrobot Автор
          07.06.2022 10:31

          Первый пост - как и писал. С опытом писать лучше научусь


  1. 0x9d8e
    07.06.2022 10:57
    +1

    Я когда-то делал что-то подобное для пет-проджекта, планировал на rust, но прототип сделал на phpReact. В результате оказалось, что именно скорости более чем хватает и в php. При том, что игровая механика вычислялась довольно тяжело (абсолютно всё - сообщение в priority queue "получателя", обрабатывающего эти сообщения по своей собственной логике и порождающего новые сообщения для других игровых объектов и сети). А сложности лежали в плоскости отладки игрового процесса (на сложной карте начинается настоящий хаос, при том хаос асинхронный) и здесь то, от чего защищает rust никак не помогло бы (с типизацией и так всё строго, вместо многопоточности многозадачность). Поэтому оставил так, но несколько выгорел и отложил для лучших времён.


    1. webrobot Автор
      07.06.2022 11:18
      -1

      Ну про rust сказать ничего не скажу (не работал) , а phpReact брать не стал (тк не понимая как устроен весь механизм Фреймворка сложно найти архитектурное решение лучше. а изучать само ядро фреймворков довольно сложно и удерживать в голове идею создателей)

      С самым простеньким сервером (1 ядро 2 гб RAM ) удалось держать ~300 игроков онлайн (роботов которые постоянно ходили и атаковали ближайшую цель следуя за ней искав ближайший путь)

      Столкнулся с проблемой когда было куча процессов которые обрабатывали NPC (асинхронных) , решил объединение этих процессов в пулы и стало гораздо лучше


  1. FanatPHP
    07.06.2022 11:04
    +3

    Посмотрел одно видео. Мне кажется, что Хабр не очень подходит для такого формата. Я понимаю, что это попытка сделать материал легким и ненапряжным, и даже где-то развлекательным, но на мой взгляд получилось скорее вульгарно. Какой-то совсем уж детсадовский юмор. Это чисто моё субъективное мнение, и, возможно, кому-то наоборот понравится. Но чисто по ощущениям — формат не совсем для хабрааудитории.


    1. webrobot Автор
      07.06.2022 11:13

      думаю вы правы. Но информации по теме как "создать cервер для игр с нуля" почти нет, так что для многих (я надеюсь) кто ищет - найдет и оно будет полезно


  1. BIOACE
    08.06.2022 20:32

    Именно эта статья практически не несёт в себе полезной информации.

    Вертикальные видео это вообще ужас.

    Но на всякий случай всё же подписался и буду следить. Не уверен что у вас получится, но желаю удачи.


    1. webrobot Автор
      08.06.2022 20:45

      Когда я начинал мне было бы полезной информация что есть редактор игровых карт Tiled , что его можно парсить на php и хранить карты в базе что даже если писать на низкоуровневых языках типа C# - это не гарантия успеха и скорости, что рационально использовать Nosql совместно с Sql и тп...

      Поэтому посчитал что для начала серии статей (а это именно первая часть из нескольких) стоит начать с этой части :)

      Т.е. я стараюсь донести именно архитектурные идеи и описать те логические трудности с которыми предстоит столкнуться ... над подачей еще стоит поработать...

      Буду надеется что мое дальнейшее творчество вас не разочарует :)


  1. MegaMANGO
    09.06.2022 19:41

    М-да уж. Во-первых, это не статья, а "прототип" статьи: ещё толком ничего не готово, ноль кода, зато дофига бессмысленных рассуждений. Во-вторых, кто съел все знаки орфографии? В большинстве мест не критично, но есть и моменты, когда реально с первого раза не понятно, что автор хотел тебе сказать (например, секунд 10 тупил на "те": я даже представить себе не мог, что кто-то так называет т.е.)

    Ну и в третьих: видосы. Тупо неудобно их смотреть. Это СТАТЬЯ, а не ЮТУБ РОЛИК, почему 90% инфы в видео?


    1. webrobot Автор
      09.06.2022 22:27

      Это первая часть серии статей.

      Если вам интересна эта тематика вы можете подписаться на мой профиль и посмотреть следующие части