- Главная
- Дополнительно
- Часто задаваемые вопросы
Часто задаваемые вопросы
Вопрос: На каком языке программирования написан ваш сервис?
Ответ: Наш сервис использует язык программирования 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
Вопрос: Безопасные ли ваш сервис от хакеров которые могут взломать игры?
Ответ: В основном игровые сервера подразделяются на следующие типы:
- Сервер маршрутизатор (самый простой и быстрый) - на него отправляют команды игроки, он пересылает их всем остальным (вся проверка ложится на игровой клиент)
- Сервер игрок - клиентская часть одного из подключившихся игроков регистрируется как сервер принимает все команды игроков и рассылает оставшийся (проверки внутри игры игрока)
- Сервер удаленный (самый медленный) - как вариант 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, адаптеры для баз данных и др.)