Перейти к основному содержимому

SERVER и CLIENT

🟦 Серверная часть (SERVER)

  • Центр управления: Серверная часть (или сервер) представляет собой центр управления в сетевом приложении. Она обрабатывает запросы от клиентов, управляет данными, вычислениями и обеспечивает централизованное управление игровым миром.
  • Выполнение логики: Сервер выполняет игровую логику и механики игры. Это означает, что сервер решает, что происходит в игровом мире, какие действия игроков допустимы, и какие изменения происходят в игре.
  • Синхронизация: Сервер отвечает за синхронизацию данных между всеми клиентами. Он убеждается в том, что игровой мир остается согласованным, чтобы все игроки видели одно и то же.
  • Безопасность: Сервер обычно отвечает за проверку на безопасность и авторизацию игроков. Он гарантирует, что только авторизованные пользователи могут взаимодействовать с игрой.

🟧 Клиентская часть (CLIENT)

  • Интерфейс для игрока: Клиентская часть (или клиент) представляет собой интерфейс для игрока. Это приложение, которое игроки устанавливают на своих компьютерах или устройствах.
  • Отображение игры: Клиент отвечает за отображение игрового мира, анимации, звуки и взаимодействие с игроком. Он обеспечивает графическое представление игры.
  • Ввод игрока: Клиент получает ввод от игрока (например, нажатия клавиш и движения мыши) и отправляет этот ввод на сервер для обработки.
  • Предсказание и интерполяция: Клиент также может выполнять предсказание движения и интерполяцию для более плавного отображения объектов в игре.

В GLua, серверная и клиентская части могут обозначаются с помощью префиксов "sv_" (server) и "cl_" (client) в именах файлов и функций, чтобы указать, для какой стороны они предназначены. Есть также названия формата "sh_" (shared), о чём мы поговорим чуть позже.

Сервер - управляющий офис в игре, принимает решения и управляет всей деятельностью игры.

Клиент - игроки в игре, взаимодействуют с миром и получают информацию от сервера.

🟦🟧 SHARED

Отдельно следовало бы поговорить о том, что такое shared. Исходя из официальной gmod-wiki, он не является отдельным реалмом, но тем не менее, является неотъемлемой частью разработки.

Shared-скрипты исполняются как на стороне клиента, так и на стороне сервера. Зачастую мы используем их для удобства, ведь внутри Shared-скрипта можно писать сразу и на стороне сервера, и на стороне клиента.

Например, вместо разделения кода ниже на два файла, всё можно поместить в один следующим образом:

-- Выполнится и на стороне клиента, и на стороне сервера
local str = "Hello World!"
print(str)

if (SERVER) then -- если SERVER, то исполняем
print("It's SERVER realm!")
else -- если не SERVER, то остаётся только CLIENT
print("It's CLIENT realm!")
end

Основная проблема Shared-скриптов - это безопасность, поскольку клиенту передаётся сразу весь файл, который содержит весь скрипт целиком. В случае, если эти файлы разделены на client, server и shared, украсть такой код будет тяжелее, а читать и работать с ним намного легче, в случае если скрипт довольно объёмный.