Pull to refresh
65
0
Александр Лурье @aml

Погромист

Send message
На фронтенде nginx, бэкенды, который этот long poll реализуют, на C++. Остальная логика игры — Perl со вставками C++, где время выполнения критично.
Мы в нашей игре (http://www.magiclands.ru) использовали технологию, которая в статье названа long poll. Работает очень быстро и устойчиво. Открытые соединения проксируются на несколько бэкендов, каждый из которых обслуживает свою часть юзеров. Масштабировать можно практически неограниченно, добавляя сервера и процессы и распределяя по ним пользователей.

Практика показала, что нагрузку создает не число одновременно установленных соединений, а количество новых запросов в единицу времени. В населенных локациях народу ходит много — постоянно много данных отправляется всем, кто там находится — нагрузка возрастает.

На гейм-дизайнера ложится задача минимизировать такие скопления, а в целях борьбы с перегрузками введена саморегулирующаяся задержка, которая не сразу закрывает соединение при поступлении данных, а ждет ещё какое-то время — вдруг ещё что придёт на отправку, и уже после этой задержки отправляет пакет. Для системы это в разы снижает нагрузку, а для игрока выглядит, как задержка между отдачей команды на перемещение и началом движения. Если сделать, что собственные действия никогда не задерживаются, а действия других персонажей можно и притормозить, то игроки задержку и замечать не будут.

В чате секундная задержка практически незаметна пользователям и позволяет комфортно общаться.
12 ...
50

Information

Rating
Does not participate
Location
Zürich, Zürich, Швейцария
Date of birth
Registered
Activity