На данной странице будут собраны тесты скорости продукта и различных функций. Зачёркнутыми являются функции от которых решено было отказаться. Красными - над которыми ведется работа по ускорению. В настоящее время все расчеты игровых механик и физики ведутся лишь на процессоре

Железо: 

  • CPU 2 ядра (2300 Mhz на ядро, 1 thread на ядро)
  • 4Gb Ram
  • PHP 8.1 
  • SSD
Помимо прочего влияние на показатели скорости получения пакетов любым сервером влияет показатель сетевой карты Frame Latency и обычно лежит в 20 000 - 150 000 получение небольших пакетов в секунду с одного потока thread  (процесса получения данных).
В зависимости от количество ядер процессора CPU которые смогут одновременно быть задействованы сервером (при условии что сам сервер может работать параллельно и обрабатывать одновременно разные запросы) этот показатель может быть кратно увеличен увеличивая общую пропускную способность.

Каждая локация игрового сервера - отдельный процесс в открытом бесшовном мире представляющий собой отдельный процесс сервера - тем самым работа идет параллельно при наличии достаточного количества ядер (однако и одно ядро может поочередно обрабатывать и игровой сервер и процессы операционной системы). Локации могут работать на одной физической машине (железе) или на разном (где установлена копия библиотеки данного продукта). Количество серверов которые могут работать в паре - не ограничено , следовательно и игроков - не ограничено (однако сервис авторизации игроков в игру работает на базе HTTP и при большом количестве игроков новые будут заходить в игру с задержкой). Тем самым можно создавать огромные игровые пространства где все могут играть одновременно (игровые существа так же могут перемещаться между локациями , а значит и серверами).


В рамках одного такого процесса возможно разделить Websocket сервер и Игровой сервер и они будут работать на разных процессах при наличии достаточного количества потоков (thread) у CPU (однако есть всего 1 CPU с 1 thread это бессмысленно) 

Тем самым количество запросов от игроков которых игровой сервер может обработать и дать ответ зависит от того отдельно ли он работает от Websocket сервера (что бы не тормозить друг друга в том числе во время приемки и отправки пакетов) на отдельном thread CPU, скорости работы самих игровых механик , пределом пропускной способности сетевой карты (которая закладывать границу скорости websocket сервер на прием и отправку пакетов) 

Тесты  RPS учитывают лишь скорость приема и обработки , одно не получения их назад тк этот показатель зависит от скорости интернета самого игрока.

Резюмируя : после того как игрок отправил команду он должен получить ответ на нее как можно раньше (желательно на следующем видео кадре, но обычно PING скорости интернета не позволяет это сделать). В играх хорошим показателем  является в 60 FPS (кадров в секунду которые в среднем глаз человека способен воспринять)  пауза между кадрами равна 0.016 секунду (1 / 60) . Хороший игровой сервер даже при большом количестве игроков и обработки от них всех команд , отправки всем пакетов не должен задерживать игрока надолго (желательно не более 0.016 секунды , тк PING уже отнимет от этого времени большую часть, и чаще превысит)



Что нового?


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

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, ммо

Кабинет

Игры