Сокеты на примере игр

Вы задумывались, что когда вы играете в Доту, Кс или Apex, то вы видите у себя на компьютере то же, что и другие игроки в режиме реального времени? Расположение на карте, когда кто-то стреляет или использует способности - все эти данные синхронизированы между всеми игроками одновременно.

Как это работает?

Всю информацию об игре знает сервер, это центральное хранилище текущего состояния игры. С ним связаны все компьютеры игроков и он передает и получают обновление об этом состоянии по сокетам. Что же такое сокеты? Давайте по порядку.

Сокеты на примере игр

Есть два основных взаимодействия сервера с компьютером игрока - или же клиента:

Первое - “запрос-ответ” (request-response), то что используется на всех сайтах, клиент сам спрашивает сервер о наличии новых данных, дешевое взаимодействие по мощности, но медленное по синхронизации, поэтому часто используется большими сайтами и практически никогда играми, представьте что пинга в кске всегда бы была не менее 300мс, не удобно, правда?

Сокеты на примере игр

И второе - сокетное (socket) взаимодействие, его ключевое отличие от первого в том, что не клиент спрашивает есть ли обновления у сервера, а сервер сам напрямую сразу шлет все обновления на клиент, из минусов- это взаимодействие требует много ресурсов, и например поддержать даже 100 клиентов таким образом крайне сложная задача, поэтому во всех играх, где критично важна минимальная задержка - вы не встретите количество игроков на одном сервере больше 100, как например PUBG/APEX/FORTNITE и другие.

Сокеты на примере игр

Подписывайся на мой канал и вступай в telegram, также я там отвечаю на вопросы)

11
2 комментария

это взаимодействие требует много ресурсов, и например поддержать даже 100 клиентов таким образом крайне сложная задача, поэтому во всех играх, где критично важна минимальная задержка - вы не встретите количество игроков на одном сервере больше 100

Майнкрафт вышел из чата.

Статья ни о чём. Я думал, что-то интересное, но тут вообще ничего, кроме рекламы.

На майнкрафте как раз не большой тпс на сервере и не критична важна синхронизация, тк то же копание блока занимает около секунды в серверу нужно обработать все два события, начало копания блока и окончание, когда в той же кс или же доте за 1 секунду может улететь до 10-20 событий, стрейфанулся, присел, получил выстрел, сам стреляешь очередью и тд