Вопрос: На каком языке программирования написан ваш сервис?

Ответ: Наш сервис использует язык программирования PHP для создания мультиплеера, установки и поддержки TCP соединений. Так же он используется для работы с базой данных Mysql и работы админ панели чей дизайн представлен в виде HTML 4 сгенерированному благодаря шаблонизатору Smarty, стили дизайна фреймворка Bootstrap 3 . Для модальных окон, фоновых запросов со страниц и другой динамики  мы используем простой и понятный javaScript фреймворк Jquery.


Вопрос: Можно ли расширить функционал сервера, добавлять свои игровые механики самому не имея доступа к коду сервиса по той же подписке ?

ОтветДа, для безопасной интеграции пользовательского кода мы используем язык посредник LUA (документация по интеграции)

 

Вопрос: А может ли этот сервер на этом языке работать так же быстро как сервер на С++, C#, NodeJS , Go Lang и тп?

Ответ: Да может! PHP не требователен к ресурсам сервера, обычно работает через HTTP протокол вместе с "посредником" (apache или nginx в режим) в режиме FPM

Наш сервис работает без посредника в режиме CLI (режим интерфейса командной строки, т.е. фактически как обычное приложение фонового режима) и взаимодействует благодаря постоянному соединению TCP между сервером и клиентом (игрой пользователя). Когда php запускается оно превращается в компьютерный код (который 0101010 ...)   и в запущенном состоянии так и висит (так что тут нет особой разницы тк и C# и С++ тк они так же компилируются в машинный код) 

Помимо прочего используются современные библиотеки предкомпиляции в тч JIT компиляция с Opcache (как известно php язык который компилируется каждый раз при обращении к нему выражаясь простыми словами), а так же библиотеки кеширования данных такие как Redis, APCU Cache и прочими...


Вопрос: На С++ есть часть библиотек которые работают быстрее чем в PHP, как вы решите эту проблему?

Ответ: в PHP есть возможность подключить библиотеки C++ и запускать их из под самого PHP. Возможно в будущем мы придем к этому решению


Вопрос: Почему бы сразу не сделать ваш сервис на языке семейства Си и не использовать сколько языков ?

Ответ: Наш сервис это не только сервер с мультиплеером. Это и панели администрирования, что в классическом смысле - сайт, и возможность встраивания языка LUA . Все эти языки созданы благодаря С++ и могут быть дополнены библиотеками на нем. Однако писать сайт на С++ это не самое удачное решение, что же касается части мультиплеера - в идеале ее менять ни нам не пользователям купившим серверную версию не потребуются : возможны обновления для улучшение скорости, но функционал мультиплеера в целом устоявшийся. Все игровые механики пишутся на LUA через админ панель и в целом менять какие то фаилы сервера пользователям которые приобрели серверную версию - нет. Другое дело сайт и админ панель и это как раз удобнее делать на языке PHP

В купе с грамотно построенной архитектурой приложения, хранилища данных и возможностью масштабировать сервисы продукт способен обеспечить скорость выше, чем аналогичный написанный другими людьми на компилируемых языках таких как С# или GO


Вопрос: Безопасные ли ваш сервис от хакеров которые могут взломать игры?

Ответ: В основном игровые сервера подразделяются на следующие типы:

  1. Сервер маршрутизатор (самый простой и быстрый) - на него отправляют команды игроки, он пересылает их всем остальным (вся проверка ложится на игровой клиент)
  2. Сервер игрок - клиентская часть одного из подключившихся игроков регистрируется как сервер принимает все команды игроков и рассылает оставшийся (проверки внутри игры игрока)
  3. Сервер удаленный (самый медленный) - как вариант 2 но запущена на компьютере администратора игры, чаще всего их арендуют у хостинг провайдеров в интернете 

Как можно догадаться в варианте 1 игрок может узнать куда отправляются и какие команды и их подделать . Во варианте 2 игрок зная что он сервер может так же воспользоваться отправляя поддельные команды и не отправляя ряд команды других игроков (получая преимущество) . Вариант 3 самый безопасный но часто разработчики самих игровых клиентов делают акцент на саму игру а не на мультиплеер и в основном этот вариант требует значительных финансовых затрат что бы в игру играло много человек , сложен в поддержке тк включает в себя еще и игру и так же возможна уязвимость если ее найдут играющие игроки

Наш сервис - это удаленный сервер без игрового контента. Мы предоставляем инструменты для создания игр (мультиплеер, редакторы, панели администрирования) , сам код игровой логики пишут наши пользователи, контент игры - остается в игровом клиенте. В том числе наши пользователи пишут и команды которые пользователи могут отправлять. И в случае если наши пользователи допустят ошибку - это может стать уязвимостью непосредственно в их игре. 

В нашем сервисе имеется возможность делать игры по типу 1 но мы позиционируем себя как сервер в котором можно производить все проверки логики игры , где пользователь шлет лишь краткие команды что он хочет сделать, а результат  - рассчитывает игровая логика написанная нашими пользователями. Да это в какой то степени дублирует функционал который часто закладывают в игровые движки (например поиск пути, столкновения) но мы стремимся создавать базовые механики самостоятельно предоставляя их пользователям бесплатно (с возможностью их изменит). Плюс мы готовимся в выпуску магазина игровых механик где авторы могут выкладывать свои библиотеки на Lua а пользователи нашего сервиса  - добавлять из в свои игры. Клиентская часть игры остается для воспроизведения анимации, музыки и другого контента, работа с графикой, камерой, светом.... В наших панах расширить функционал нашей админ панели и редакторов для добавления и редактирования и этого контента тоже


Вопрос: Какие отличительные особенности сервера?

Ответ: Отличительные особенности:

  • Подходит для интеграции с играми на любой платформе и языке ( Unity, Unreal Engine, Phaser 2D, Godot, C#, C++, Go, NodeJs, JavaScript, HTML 5 и др)
  • фреймворк (ядро) написано с нуля для данного сервиса
  • архитектура кода была максимально проработана для достижения максимальной производительности 
  • есть режим отладки взаимодействия RPC API в веб версии игры с UI интерфейса (аналог сервиса Swagger)
  • включает дополнительные веб сервисы (создание карт, локализация, промо сайт к игре, редактор игрового баланса, редактор игровых объектов, роли доступа админ панели и др.)
  • хорошие показатели скорости
  • имеется примеры реализации клиентской (игровой) части взаимодействия с API (игра - песочница) на Unity 
  • возможность горизонтального масштабирования (распределение на нескольких физических серверах)
  • минимальные потребления ресурсов (10% CPU одноядерного процессора,  5Мб оперативной памяти на каждые 100 игроков)
  • параллельная обработка разных локаций в игре (асинхронная работа)
  • возможность расширять механики и поведения объектов в игре добавляя их код в веб панели администрирования (без затрагивания самого ядра)
  • База знаний к страница панели администрирования (с возможность ее расширения при выборе покупки лицензии на ваш сервер при дальнейших улучшениях)
  • Goods practics в тч для командной работы при выборе покупки лицензии и ведении своей версии продукта (MVC стандарты , шаблоны проектирования, миграции баз данных, непрерывная интеграция с GIT, адаптеры для баз данных и др.)



Что нового?


Статьи про разработку продукта

PHP, Программирование, Разработка игр, Unity, Unreal Engine, php, игровой сервер, разработка сервисов, онлайн-игры, разработка онлайн-игр

В предыдущей статье я рассказывал об архитектуре приложения , где ее отдельные компоненты могли бы работать параллельно не блокируя выполнения друг друга.

В этой статье я расскажу о причинах , по которым пришлось сменить взаимодействие между потоками на процессы и выделить компоненты в отдельные сервисы.

Бонус - архитектура игрового сервера в картинках.

Читать далее
Создание сервера для онлайн ММО игр на PHP ч.14 — Сетевая карта и задержка кадра (Latency frame) по RFC 2544 (1242)
PHP, Проектирование и рефакторинг, Разработка игр, Сетевые технологии, Параллельное программирование, php, go, c#, онлан игры
Создание сервера для онлайн ММО игр на PHP ч.13 — Event-driven паттерн, JSON-RPC и почему не сервисная (SOA) архитектура
PHP, Программирование, Проектирование и рефакторинг, Разработка игр, Алгоритмы, php, event-driven, разработка игр, mmo, mmorpg, шаблон проектирования
Создание сервера для онлайн ММО игр на PHP ч. 12 — Очереди и параллельное программирование на CPU
PHP, Анализ и проектирование систем, Разработка игр, Сетевые технологии, Параллельное программирование, php, go, онлайн-игры, очереди, очереди задач, очереди сообщений, очереди с приоритетом, websocket, unity, ммо

Кабинет

Игры