Как играть по сети приложение
Играть в Майнкрафт можно не только в одиночном мире, взаимодействуя исключительно с жителями деревни – существуют разные методы, позволяющие создать локальный или сетевой сервер, чтобы сгенерировать новый мир и начать исследовать его вместе с друзьями.
Предлагаю ознакомиться с разными способами создать сервер Minecraft для игры с друзьями по сети.
Вариант 1: Открытие одиночного мира для игры по LAN
Если ваши с другом компьютеры объединены в одну локальную сеть или хотя бы соединены с одной беспроводной точкой доступа, можно воспользоваться самым простым вариантом – открыть одиночный мир для игры по LAN. Для этого нужно выполнить пару простых действий.
- Зайдите в игру и создайте новый мир для одиночной игры с оптимальными настройками.
- Нажмите Esc для появления меню, в котором надо выбрать «Открыть для сети» .
- Появится уведомление с присвоенным для сервера портом, который необходимо запомнить.
- Теперь выйдите на рабочий стол, запустите командную строку и введите в ней ipconfig для определения своего IPv4-адреса.
- Остальные игроки должны использовать прямое подключение, введя ваш IP-адрес и присвоенный порт. Например: 192.168.0.1:25565 .
Недостаток этого метода заключается в том, что он не всегда корректно работает из-за неправильных сетевых настроек или проблем в организации локальной сети. Если вы не знаете, как самостоятельно решать появившиеся ошибки, лучше перейдите к реализации одного из следующих вариантов.
Мощные игровые серверы для Minecraft от 3 руб./час
От 4 Гб ОЗУ, от 80 Гб на скоростном NVMe и стабильные 200 Мбит/сек
Вариант 2: Создание выделенного локального сервера Minecraft
Этот вариант тоже подойдет в том случае, когда вы с другом находитесь в пределах одной квартиры и подключены к локальной сети при помощи LAN-кабеля или Wi-Fi. Если вы еще не организовали подобное подключение, обязательно выполните его, а затем на всех компьютерах приступайте к общей настройке операционной системы, необходимой для присоединения к будущему серверу.
В качестве IP задайте 192.168.0.X , где вместо последней цифры вставьте любое число до 64. Маска подсети указывается как 255.255.255.255 . В завершение отправьте компьютер на перезагрузку. На других ПК сделайте то же самое, но последнюю цифру IP-адреса меняйте на неиспользованную ранее, чтобы при подключении не появились конфликтные ситуации.
Следующий этап – создание сервера для игры по локальной сети. В этом случае у пользователя появляется два разных варианта. Первый более оптимальный, поскольку позволяет создать полноценный сервер и далее модернизировать его модами или изменять настройки по желанию. Файлы пустого сервера Майнкрафт понадобится скачать с любого удобного сайта в интернете, задав соответствующий запрос поисковику. После этого войдите в директорию и откройте файл с настройками через любой текстовый редактор (файл server.properties).
Далее отредактируйте несколько строк для обеспечения нормального соединения. В первую очередь найдите server-ip=X и после знака равно впишите IP того компьютера, который выступает в качестве основного (тот IP-адрес, что создавался в предыдущем шаге). В строке server-port=N вписывается порт, обычно это 25565 . Осталось запустить сервер через присутствующий в директории файл start.bat .
Вариант 3: Организация сетевого подключения через Hamachi
Hamachi – самая популярная программа для организации виртуальных сетей. Она может использоваться геймерами для того, чтобы создавать одну сеть для совместной игры с друзьями, которые находятся за пределами локальной сети или не могут подключиться к ней по другим причинам. Каждый пользователь должен скачать Хамачи с официального сайта и создать учетную запись.
Теперь тот пользователь, который хочет создать сервер, в самой программе нажимает «Создать новую сеть» и задает имя/пароль. По этим данным сеть ищут друзья, нажав по кнопке «Подключиться к существующей сети» в Хамачи. После того как все пользователи подключатся, вы можете настроить свой сервер, введя полученный IP-адрес при прямом соединении или поменяв его в настройках сервера Minecraft так, как это было показано в инструкции по настройке выделенного локального подключения.
Вариант 4: Использование общедоступных серверов или Realms
Существуют общедоступные серверы Майнкрафт, на которых может играть огромное количество людей одновременно. Ничего не помешает вам с другом найти одинаковый сервер, подключиться к нему, пройти регистрацию и найти друг друга для дальнейшей игры. Учитывайте, что некоторые серверы доступны только для лицензионных версий Minecraft, а другие работают и с пиратскими.
Еще один вариант – покупка Realms на официальном сай те . В счет ежемесячной подписки у вас появляется возможность организовать сервер и подключить к нему до десяти игроков. Кликните по выделенной ссылке, чтобы ознакомиться с преимуществами этой подписки и решить, нужна ли она вам с друзьями.
Это были все возможные варианты организации совместной игры с друзьями в Minecraft по сети. Приятной игры вам и вашим друзьям!
Большинство игр имеют поддержку многопользовательской игры в локальной сети или в интернете.
- LiveJournal
- Blogger
Для подключения пользователей друг к другу используются дополнительные программы, без которых невозможно обойтись
Причинами применения специальных утилит является:
- Игра по интернету не поддерживается, а только в режиме локалки. Для организации многопользовательской игры, сначала формируется между несколькими компьютерами сеть в интернете, и только после этого можно начинать сеанс.
- Ip-адрес – «черный», поэтому отсутствует допуск компьютера через интернет. Причина в том, что провайдер, предоставляющий выход, не имеет «белый» доступ в интернет. Здесь понадобится софт.
- Постоянная смена ip-адреса, что приводит к неудобству, так как для использования многих игрушек требуется указывать адрес. Поэтому надо постоянно вводить новые данные. Для решения данной задачи используются специальные утилиты, описанные ниже.
GameRanger
Программа является платформой для игр по локальной сети в виртуале
Во время установки приложения необходимо зарегистрировать аккаунт. Для этого нужно указать действующийe-mail, чтобы друзья могли легко найти игрока.
Используя бесплатную версию программы для игры по локальной сети,пользователь может добавить в закладки пятьдесят своих друзей, чтобы всегда знать, кто находится в онлайн.
№5 — Soul Knight
Расположения комнат в подземельях, монстры и бонусы генерируются в Soul Knight генерируется случайным образом, что делает каждую игровую сессию уникальной. И, конечно же, все это будет еще интереснее, если взять с собой в приключение друзей по точке доступа с телефона. Играть можно командой из 5 человек одновременно.
Tungle
Это приложение применяется пользователями, чтобыиграть по интернету
Оно объединяет десятки тысяч игроков из различных стран в одну сеть игрушки, которая поделена на группы. Тungleдает возможность друзьям играть по сети, независимо в какой стране они живут. Возникает ощущение, что друзья сидят рядом друг возле друга.
Преимуществом Тангла является наличие игрового чата для общения и передачи файлов, кнопки Don’tPanic, предназначенной для оказания помощи по запуску определенной игрушки.
Работает утилита в седьмой, восьмой и ХР ОС Виндовс
Это приложение имеет для каждой игры отдельные комнаты на 256 человек, каждый из которых может обеспечить старт своей копии игрушки, остальные могут к ней подключиться по принципу локалки. Тангл имеет все востребованные и не очень популярные игрушки (см. скриншот).
Приложение легко запоминает комнаты игроков, в которых есть чат, позволяющий вести диалог со всеми игроками сети. Программа для сетевой игрыТангл является отличной альтернативой GameRanger, так его используют более семи миллионов человек со всего мира.
Counter Strike 1.6
Дата выхода: 2000 год Жанр: мультиплеерный шутер от первого лица про спецназ Разработчик: Valve Издатель: Sierra Entertainment
Counter Strike шутер от первого лица, ставший популярным довольно — таки давно. Еще в игровых клубах молодежь того времени собиралась, чтобы сразиться на онлайн поле боя. Dust, Mirage, Nuke — все эти карты надолго остаются в сердце каждого игрока, оставляя приятные воспоминания.
Вам предстоит сделать выбор между командой террористов или спецназа. Задача первых — поставить бомбу и защищать ее до самого взрыва. Спецназ же должен обезвредить ее или вовсе не дать поставить. Также в игре присутствуют и другие режимы, среди которых: мясорубка, классический бой (без бомбы) и так далее. Казалось бы, все проще простого, однако игровая механика заточена под постоянное совершенствование как стрельбы, так и стратегии. Присоединитесь к союзникам и дайте отпор любому противнику!
LanGame
Это программа, чтобы играть по сети для людей, находящихся в различных сетях
Игра осуществляется с помощью Langame,даже в том случае, если эта возможность отсутствует в ней. Программа имеет простой интерфейс, понятный даже детям. Она работает со многими игрушками. Для использования приложения не требуется выход в интернет.
Если пользователь использует подключение к интернету определенного провайдера вместе со своими друзьями. В режимесетевых игр, они друг друга не видят, чтобы решить эту проблему поможет установка этой утилиты.
Для этого необходимо:
Включить сетевой режим, чтобы пользователи видели и взаимодействовали друг с другом. С помощью приложения в игрушке появится режим нескольких пользователей (многопользовательский).
С появлением интернета высоких скоростей, данное приложение теряет актуальность, так как с друзьями из других населенных пунктов можно взаимодействовать в игрушке даже с низким пинком, при отсутствии локалки. Некоторые пользователи по-прежнему любят и ценятигры по lan–программе.
№8 — Snake Rivals
Сложно найти человека, который давно пользуется мобильным телефоном и при этом ни разу не играл в змейку. Суть всех подобных игр — ползать по экрану, собирая еду и избегая столкновений с препятствиями. Чем больше еды вы собрали, тем длиннее становится змейка и тем сложнее с ней управляться. Вскоре угрозу начинают представлять не только стены на уровне, но и части вашего собственного тела.
А теперь представьте, какое безумие будет твориться на уровне, если змеек будет несколько и каждой будет управлять живой игрок. Именно такой опыт и предлагают испытать разработчики Snake Rivals. Помимо классики, тут есть несколько увлекательных режимов вроде золотой лихорадки и королевской битвы, которые откроют вам знакомую змейку с абсолютно новой стороны. Приятный бонус — кастомизация персонажей: ползать по экрану будут не одинаковые змеи, а китайские драконы, единороги и даже поезда!
Как соединить два компьютера без программ?
Для этого нам необходимо:
- Перейти в центр управления сетями и общим доступом, и нажать «Настройка нового подключения или сети».
- Выбрать «Настройка беспроводной сети компьютер — компьютер» и нажать далее.
- Выбрать имя, тип сети (лучше WPA2, поскольку он исключит большую вероятность взлома вашего соединения), написать пароль и нажать на галочку: «Сохранить изменения для этой сети».
- После настройки нажать далее и закрыть окно.
Перейдите на второй компьютер, где необходимо просто подключиться к нашей сети.
Данный способ подойдет, если 2 компьютера находятся рядом, но если они далеко, то, к сожалению, сигнал доставать не будет.
Но что делать, если вам с другом необходимо связаться на большом расстоянии?
Для этого необходимо скачать одну из программ, представленных ниже.
Cossacks 3
Дата выхода: 2020 год Жанр: историческая стратегия с мультиплеером Разработчик: GSC Game World Издатель: GSC Game World
Стратегии всегда притягивали игроков огромнейшим творческим потенциалом. Строить замок? Пожалуйста! Добывать золото? Держи! Cossacks 3 является приемником данных традиций.
Вам предстоит стать мудрым правителем и возглавить империю XVII–XVIII вв. Масштабная стратегия о великих сражениях 18 века — самое точное описание этой игры. Огромное количество наций, видов юнитов, техники и стратегий поистине вызывают уважение к данному творению. Поле боя вмещает до 32 тысяч юнитов!
Важно, что не только военная стратегия решает исход противостояния: Вам придется управлять империей и активно ее развивать. Станьте Великим предводителем или уйдите в историю как очередной правитель — все зависит только от Вас!
Overkill’s The Walking Dead
Дата выхода: 2020 год Жанр: кооперативный шутер от первого лица во вселенной «Ходячих мертвецов» Разработчик: OVERKILL — a Starbreeze Studio. Издатель: Starbreeze Publishing AB
Игры про зомби становятся все популярнее, постоянно набирая все новую и новую аудиторию. Overkill’s The Walking Dead является продолжателем традиций небезызвестной Left 4 Dead. Сама игра представляет собой шутер от первого лица. Весь геймплей разворачивается в Вашингтоне, охваченным зомби — апокалипсисом. Главным героям — Эйдану, Гранту, Хизер и Майе предстоит проявить настоящую стойкость и сражаться за свою жизнь. Лекарства, оружие, патроны и так далее станут целью Ваших вылазок в опасный мир.
В игре реализована система умений и их прокачки. То есть, Вы сможете выбрать себе персонажа по полезным (на Ваш взгляд) характеристикам и улучшать его. Overkill’s The Walking Dead опирается на командное взаимодействие всех членов отряда. Каждый должен внести свой вклад в победу и постараться выжить.
Программы для создания виртуальной локальной сети
Если у вас нет лицензии игры, или вы просто не хотите мучиться с постоянным копированием и вставкой ip-адреса, то можете просто скачать и установить имитатор LAN — это программа для соединения нескольких компьютеров. С помощью таких программ можно с легкостью играть в пиратские или даже лицензионные игры по сети, а иногда и находить там друзей.
Таких программ на самом деле достаточно и найти подходящую может каждый. Бывает и такое, что одна из программ может не работать или не поддерживать нужную игру, как зачастую бывает с Hamachi или другими программами, поэтому вы можете поискать решение проблемы в интернете или же воспользоваться другой программой.
Borderlands
Дата выхода: 2011 год Жанр: пиксельная приключенческая песочница Разработчик: Gearbox Software Издатель: 2K
Borderlands — шутер от первого лица, включающий в себя элементы RPG: инвентарь, возможность прокачки скиллов и выполнения квестов. Нестандартный юмор придает Borderlands некий «шарм», надолго затягивающий любого игрока.
Сюжет разворачивается в 5252 году на планете Пандора. Колонисты пытались найти тут золото и минералы, однако надежды себя не оправдали, и планета погрузилась в полный хаос. Трущобы и бедность — вот что стало с некогда развивающейся планетой. Однако все меняет находка Хранилища, только оно закрыто и убивает всех, кто пытается его вскрыть. Вам предстоит сделать это!
Уникальная система прокачки персонажа заставит Вас проходить все побочные квесты! Прочувствуйте на себе жестокую действительность Пандоры!
Dead Island
Дата выхода: 2020 год Жанр: кооперативный шутер от первого лица про выживание на острове с зомби Разработчик: Techland Издатель: Deep Silver
Dead Island — шутер от первого лица от польских разработчиков Techland в жанре survival horror. Само действие разворачивается в Новой Гвинее. Главные герои игры — рядовые туристы, оказавшиеся на тропическом острове, принадлежащему курорту The Royal Palms Resort, во время зомби — апокалипсиса. Буквально вырывая свою жизнь из рук монстров им придется узнать все тайны этого райского места и спастись с минимальными потерями.
Оружием может стать все: начиная от факела, копья, биты и заканчивая ножкой стула. Максимальное количество крови и опасности, окружающей со всех сторон, придает некий драйв геймплею, делает его живым и бодрым. Сможете ли Вы выжить в райском месте во время настоящего ада?
Hunt Showdown
Дата выхода: 2020 год Жанр: кооперативный шутер с элементами хоррора про зомби и мутантов Разработчик: Crytek Издатель: Crytek
Ужасающие монстры заполонили болота Луизианы. Вы, как отважный и профессиональный охотник, должны избавиться от этой угрозы. За трофеи, которые можно добыть из монстров, Вы получаете деньги, на которые можно улучшать снаряжение и снова отправляться на охоту. Однако другие игроки тоже не дремлют — они будут стараться получить его раньше или же отобрать, совершенно не беспокоясь за Вашу жизнь. Сражайтесь и с монстрами, и с людьми, своей жадностью не менее подходящих на чудовищ.
Вполне реально создать отряд, который будет держать в страхе всю округу. После удачной охоты улучшайте навыки персонажа, чтобы сделать его более полезным в бою. Избавьте Луизиану от этого кошмара и покажите всем кто тут настоящий снайпер!
Играть в Майнкрафт можно не только в одиночном мире, взаимодействуя исключительно с жителями деревни – существуют разные методы, позволяющие создать локальный или сетевой сервер, чтобы сгенерировать новый мир и начать исследовать его вместе с друзьями.
Предлагаю ознакомиться с разными способами создать сервер Minecraft для игры с друзьями по сети.
Вариант 1: Открытие одиночного мира для игры по LAN
Если ваши с другом компьютеры объединены в одну локальную сеть или хотя бы соединены с одной беспроводной точкой доступа, можно воспользоваться самым простым вариантом – открыть одиночный мир для игры по LAN. Для этого нужно выполнить пару простых действий.
- Зайдите в игру и создайте новый мир для одиночной игры с оптимальными настройками.
- Нажмите Esc для появления меню, в котором надо выбрать «Открыть для сети» .
- Появится уведомление с присвоенным для сервера портом, который необходимо запомнить.
- Теперь выйдите на рабочий стол, запустите командную строку и введите в ней ipconfig для определения своего IPv4-адреса.
- Остальные игроки должны использовать прямое подключение, введя ваш IP-адрес и присвоенный порт. Например: 192.168.0.1:25565 .
Недостаток этого метода заключается в том, что он не всегда корректно работает из-за неправильных сетевых настроек или проблем в организации локальной сети. Если вы не знаете, как самостоятельно решать появившиеся ошибки, лучше перейдите к реализации одного из следующих вариантов.
Мощные игровые серверы для Minecraft от 3 руб./час
От 4 Гб ОЗУ, от 80 Гб на скоростном NVMe и стабильные 200 Мбит/сек
Вариант 2: Создание выделенного локального сервера Minecraft
Этот вариант тоже подойдет в том случае, когда вы с другом находитесь в пределах одной квартиры и подключены к локальной сети при помощи LAN-кабеля или Wi-Fi. Если вы еще не организовали подобное подключение, обязательно выполните его, а затем на всех компьютерах приступайте к общей настройке операционной системы, необходимой для присоединения к будущему серверу.
В качестве IP задайте 192.168.0.X , где вместо последней цифры вставьте любое число до 64. Маска подсети указывается как 255.255.255.255 . В завершение отправьте компьютер на перезагрузку. На других ПК сделайте то же самое, но последнюю цифру IP-адреса меняйте на неиспользованную ранее, чтобы при подключении не появились конфликтные ситуации.
Следующий этап – создание сервера для игры по локальной сети. В этом случае у пользователя появляется два разных варианта. Первый более оптимальный, поскольку позволяет создать полноценный сервер и далее модернизировать его модами или изменять настройки по желанию. Файлы пустого сервера Майнкрафт понадобится скачать с любого удобного сайта в интернете, задав соответствующий запрос поисковику. После этого войдите в директорию и откройте файл с настройками через любой текстовый редактор (файл server.properties).
Далее отредактируйте несколько строк для обеспечения нормального соединения. В первую очередь найдите server-ip=X и после знака равно впишите IP того компьютера, который выступает в качестве основного (тот IP-адрес, что создавался в предыдущем шаге). В строке server-port=N вписывается порт, обычно это 25565 . Осталось запустить сервер через присутствующий в директории файл start.bat .
Вариант 3: Организация сетевого подключения через Hamachi
Hamachi – самая популярная программа для организации виртуальных сетей. Она может использоваться геймерами для того, чтобы создавать одну сеть для совместной игры с друзьями, которые находятся за пределами локальной сети или не могут подключиться к ней по другим причинам. Каждый пользователь должен скачать Хамачи с официального сайта и создать учетную запись.
Теперь тот пользователь, который хочет создать сервер, в самой программе нажимает «Создать новую сеть» и задает имя/пароль. По этим данным сеть ищут друзья, нажав по кнопке «Подключиться к существующей сети» в Хамачи. После того как все пользователи подключатся, вы можете настроить свой сервер, введя полученный IP-адрес при прямом соединении или поменяв его в настройках сервера Minecraft так, как это было показано в инструкции по настройке выделенного локального подключения.
Вариант 4: Использование общедоступных серверов или Realms
Существуют общедоступные серверы Майнкрафт, на которых может играть огромное количество людей одновременно. Ничего не помешает вам с другом найти одинаковый сервер, подключиться к нему, пройти регистрацию и найти друг друга для дальнейшей игры. Учитывайте, что некоторые серверы доступны только для лицензионных версий Minecraft, а другие работают и с пиратскими.
Еще один вариант – покупка Realms на официальном сай те . В счет ежемесячной подписки у вас появляется возможность организовать сервер и подключить к нему до десяти игроков. Кликните по выделенной ссылке, чтобы ознакомиться с преимуществами этой подписки и решить, нужна ли она вам с друзьями.
Это были все возможные варианты организации совместной игры с друзьями в Minecraft по сети. Приятной игры вам и вашим друзьям!
Последние две недели я работал над сетевым движком для своей игры. До этого я вообще ничего не знал о сетевых технологиях в играх, поэтому прочитал множество статей и провёл множество экспериментов, чтобы уяснить все концепции и иметь возможность написать собственный сетевой движок.
В этом руководстве я хотел бы поделиться с вами различными концепциями, которые вам нужно изучить перед написанием собственного игрового движка, а также самыми лучшими ресурсами и статьями для их изучения.
В целом существует два основных типа сетевых архитектур: peer-to-peer и клиент-серверная. В архитектуре peer-to-peer (p2p) данные передаются между любыми парами подключенных игроков, а в клиент-серверной архитектуре данные передаются только между игроками и сервером.
Хотя архитектура peer-to-peer по-прежнему используется в некоторых играх, стандартом является клиент-серверная: она проще в реализации, требует канал меньшей ширины и облегчает защиту от читерства. Поэтому в этом руководстве мы сосредоточимся на клиент-серверной архитектуре.
В частности, нас больше всего интересуют авторитарные серверы: в таких системах сервер всегда прав. Например, если игрок думает, что находится в координатах (10, 5), а сервер говорит ему, что он в (5, 3), то клиент должен заменить свою позицию той, которую передаёт сервер, а не наоборот. Использование авторитарных серверов упрощает распознавание читеров.
В игровых сетевых системах есть три основных компонента:
- Транспортный протокол: как передаются данные между клиентами и сервером.
- Протокол приложения: что передаётся от клиентов серверу и от сервера клиентам и в каком формате.
- Логика приложения: как передаваемые данные используются для обновления состояния клиентов и сервера.
Первый шаг заключается в выборе протокола для транспортировки данных между сервером и клиентами. Для этого существует два Интернет-протокола: TCP и UDP. Но вы можете создать и собственный транспортный протокол на основе одного из них или применить библиотеку, в которой они используются.
Сравнение TCP и UDP
И TCP, и UDP основаны на IP. IP позволяет передавать пакет от источника получателю, но не даёт гарантий, что отправленный пакет рано или поздно попадёт к получателю, что он доберётся до него хотя бы раз и что последовательность пакетов придёт в правильном порядке. Более того, пакет может содержать только ограниченный размер данных, задаваемый величиной MTU.
Чтобы понять, почему эти функции могут вызывать задержку, надо разобраться, как работает TCP. Когда узел-отправитель передаёт пакет узлу-получателю, он ожидает получить подтверждение (ACK). Если спустя определённое время он не получает его (потому что пакет или подтверждение было утеряно, или по каким-то другим причинам), то отправляет пакет повторно. Более того, TCP гарантирует получение пакетов в правильном порядке, поэтому пока утерянный пакет не получен, все остальные пакеты не могут быть обработаны, даже если они уже получены узлом-получателем.
Но как вы наверно понимаете, задержка в многопользовательских играх очень важна, особенно в таких активных жанрах, как FPS. Именно поэтому многие игры используют UDP с собственным протоколом.
Итак, если TCP такой отстойный, то мы будем создавать свой транспортный протокол на основе UDP?
Всё немного сложнее. Даже хотя TCP почти субоптимален для игровых сетевых систем, он может вполне хорошо работать конкретно в вашей игре и сэкономить ваше драгоценное время. Например, задержка может и не быть проблемой для пошаговой игры или игры, в которую можно играть только в сетях LAN, где задержки и утеря пакетов намного меньше, чем в Интернете.
Во многих успешных играх, в том числе World of Warcraft, Minecraft и Terraria, используется TCP. Однако в большинстве FPS применяются собственные протоколы на основе UDP, поэтому ниже мы поговорим о них подробнее.
Если вы решите использовать TCP, то убедитесь, что отключен алгоритм Нейгла, потому что он буферизует пакеты перед отправкой, а значит, увеличивает задержку.
Чтобы подробнее узнать о различиях между UDP и TCP в контексте многопользовательских игр, можно прочитать статью Гленна Фидлера UDP vs. TCP.
Собственный протокол
Итак, вы хотите создать собственный транспортный протокол, но не знаете, с чего начать? Вам повезло, ведь Гленн Фидлер написал об этом две потрясающие статьи. В них вы найдёте множество умных мыслей.
Первая статья, Networking for Game Programmers 2008 года, проще, чем вторая, Building A Game Network Protocol 2016 года. Рекомендую вам начать с более старой.
Учтите, что Гленн Фидлер — большой сторонник использования собственного протокола на основе UDP. И после прочтения его статей вы наверняка переймёте у него мнение о том, что TCP имеет в видеоиграх серьёзные недостатки, и захотите реализовать собственный протокол.
Но если вы новичок в работе с сетями, то сделайте себе одолжение и используйте TCP или библиотеку. Для успешной реализации собственного транспортного протокола нужно предварительно многому научиться.
Сетевые библиотеки
Если вам нужно что-то более эффективное, чем TCP, но вы не хотите заморачиваться реализацией собственного протокола и вдаваться во множество подробностей, то можете воспользоваться сетевой библиотекой. Их очень много:
-
Гленна Фидлера , которая больше не поддерживается, но её форк SLikeNet похоже ещё активен. — это библиотека, созданная для многопользовательского FPS Cube компании Valve
Транспортный протокол: заключение
Подведём итог: существует два основных транспортных протокола: TCP и UDP. TCP обладает множеством полезных особенностей: надёжность, сохранение порядка пакетов, обнаружение ошибок. У UDP всего этого нет, зато TCP по своей природе обладает повышенными задержками, недопустимыми для некоторых игр. То есть для обеспечения низких задержек можно создать собственный протокол на основе UDP или использовать библиотеку, реализующую транспортный протокол на UDP и адаптированную для многопользовательских видеоигр.
Выбор между TCP, UDP и библиотекой зависит от нескольких факторов. Во-первых, от потребностей игры: нужны ли ей низкие задержки? Во-вторых, от требований протокола приложения: нужен ли ему надёжный протокол? Как мы увидим из следующей части, можно создать протокол приложения, для которого вполне подойдёт ненадёжный протокол. Наконец, нужно ещё учитывать опытность разработчика сетевого движка.
У меня есть два совета:
- Максимально абстрагируйте транспортный протокол от остальной части приложения, чтобы его можно было легко заменить, не переписывая весь код.
- Не занимайтесь преждевременной оптимизацией. Если вы не специалист по сетям и не уверены, нужен ли вам собственный транспортный протокол на основе UDP, то можете начать с TCP или библиотеки, обеспечивающих надёжность, а затем протестировать и измерить производительность. Если возникают проблемы и вы уверены, что причина заключается в транспортном протоколе, то возможно настало время создавать собственный транспортный протокол.
Теперь, когда мы можем обмениваться данными между клиентами и сервером, нужно решить, какие именно данные передавать и в каком формате.
Классическая схема заключается в том, что клиенты отправляют серверу ввод или действия, а сервер отправляет клиентам текущее игровое состояние.
Сервер отправляет не полное, а отфильтрованное состояние с сущностями, которые находятся рядом с игроком. Он делает это по трём причинам. Во-первых, полное состояние может быть слишком большим для передачи с высокой частотой. Во-вторых, клиентов в основном интересуют визуальные и аудиоданные, потому что бОльшая часть игровой логики симулируется на сервере игры. В-третьих, в некоторых играх игрок не должен знать определённых данных, например, позицию противника на другом конце карты, ведь в противном случае он может сниффить пакеты и точно знать, куда двигаться, чтобы его убить.
Сериализация
В голову сразу приходит мысль использовать человекочитаемый формат, например JSON или XML. Но это будет совершенно неэффективно и впустую займёт большую часть канала.
Вместо этого рекомендуется использовать двоичный формат, который намного более компактен. То есть пакеты будут содержать только несколько байтов. Здесь нужно учитывать проблему порядка байтов, который на разных компьютерах может отличаться.
Для сериализации данных можно использовать библиотеку, например:
-
компании Google компании Sandstorm Шейна Гранта и Рэндольфа Вурхиса
Альтернативным решением может быть самостоятельная реализация, она не особо сложна, особенно если в коде вы используете ориентированный на данные подход. Кроме того, она позволит вам выполнять оптимизации, которые не всегда возможны при использовании библиотеки.
Сжатие
Количество данных, передаваемых между клиентами и сервером, ограничено пропускной способностью канала. Сжатие данных позволит передавать в каждом снэпшоте больше данных, увеличить частоту обновления или просто снизить требования к каналу.
Битовая упаковка
Первая техника — это битовая упаковка. Она заключается в использовании ровно того количества битов, которое необходимо для описания нужной величины. Например, если у вас есть перечисление, которое может иметь 16 различных значений, то вместо целого байта (8 бит) можно использовать всего 4 бита.
Гленн Фидлер объясняет, как реализовать это, во второй части статьи Reading and Writing Packets.
Битовая упаковка особенно хорошо работает с дискретизацией, которая будет темой следующего раздела.
Дискретизация
Дискретизация — это техника сжатия с потерями, которая заключается в использовании для кодирования величины только подмножества возможных значений. Проще всего реализовать дискретизацию округлением чисел с плавающей запятой.
Гленн Фидлер (опять!) показывает, как применять дискретизацию на практике, в своей статье Snapshot Compression.
Алгоритмы сжатия
Следующей техникой будут алгоритмы сжатия без потерь.
Вот, на мой взгляд, три самых интересных алгоритма, которые нужно знать:
-
с заранее вычисленным кодом, которое чрезвычайно быстро и может давать хорошие результаты. Оно использовалось для сжатия пакетов в сетевом движке Quake3. — алгоритм сжатия общего назначения, который никогда не увеличивает объём данных. Как можно увидеть здесь, он применялся во множестве областей применения. Для обновления состояний он может оказаться избыточным. Но он может и пригодиться, если вам нужно отправлять клиентам с сервера ассеты, длинные тексты или рельеф. — это, наверно, простейший алгоритм сжатия, но он очень эффективен для определённых типов данных, и может использоваться как этап предварительной обработки перед zlib. Он особенно подходит для сжатия рельефа, состоящего из тайлов или вокселей, в которых множество соседних элементов повторяется.
Дельта-сжатие
Последняя методика сжатия — это дельта-сжатие. Она заключается в том, что передаются только различия между текущим игровым состоянием и последним состоянием, полученным клиентом.
Впервые она была применена в сетевом движке Quake3. Вот две статьи, объясняющих способ её использования:
-
Брайана Хука Фабьена Санглара [перевод статьи на Хабре, см. раздел «Сетевая модель»]
Шифрование
Кроме того вам может понадобиться шифровать передачу информации между клиентами и сервером. На это есть несколько причин:
Протокол приложения: заключение
На этом мы закончим с протоколом приложения. Я считаю, что сжатие совершенно необязательно и решение о его использовании зависит только от игры и требуемой пропускной способности канала. Шифрование, на мой взгляд, обязательно, но в первом прототипе можно обойтись без него.
Теперь мы способны обновлять состояние в клиенте, но можем столкнуться с проблемами задержек. Игроку, выполнив ввод, нужно ждать обновления состояния игры от сервера, чтобы увидеть, какое воздействие он оказал на мир.
Более того, между двумя обновлениями состояния мир совершенно статичен. Если частота обновления состояний низка, то движения будут очень дёрганными.
Существует несколько техник, позволяющих снизить влияние этой проблемы, и в следующем разделе я о них расскажу.
Техники сглаживания задержек
Все описанные в этом разделе техники подробно рассмотрены в серии Fast-Paced Multiplayer Габриэля Гамбетты. Я настойчиво рекомендую прочитать эту великолепную серию статей. В ней также есть интерактивное демо, позволяющее увидеть, как эти техники работают на практике.
Первая техника заключается в том, чтобы применять результат ввода напрямую, не ожидая ответа от сервера. Это называется прогнозированием на стороне клиента. Однако когда клиент получает обновление от сервера, он должен убедиться, что его прогноз был верным. Если это не так, то ему нужно просто изменить своё состояние согласно полученному от сервера, потому что сервер авторитарен. Эта техника впервые была использована в Quake. Подробнее о ней можно прочитать в статье Quake Engine code review Фабьена Санглара [перевод на Хабре].
Второй набор техник используется для сглаживания движения других сущностей между двумя обновлениями состояния. Существует два способа решения этой задачи: интерполяция и экстраполяция. В случае интерполяции берутся два последних состояния и показывается переход из одного в другое. Её недостаток в том, что она вызывает небольшую долю задержки, потому что клиент всегда видит то, что происходило в прошлом. Экстраполяция заключается в прогнозировании того, где сейчас должны находиться сущности на основании последнего состояния, полученного клиентом. Её недостаток в том, что если сущность полностью меняет направление движения, то возникнет большая погрешность между прогнозом и реальной позицией.
Последняя, самая продвинутая техника, полезная только в FPS — это компенсация лага. При использовании компенсации лага сервер учитывает задержки клиента, когда он стреляет в цель. Например, если игрок выполнил хедшот на своём экране, но в реальности его цель из-за задержки находилась в другом месте, то было бы нечестно отказывать игроку в праве на убийство из-за задержки. Поэтому сервер выполняет перемотку времени назад, на тот момент, когда игрок выстрелил, чтобы симулировать, что видел игрок на своём экране, и проверить коллизию между его выстрелом и целью.
Гленн Фидлер (как всегда!) написал в 2004 году статью Network Physics (2004), в которой заложил фундамент синхронизации симуляции физики между сервером и клиентом. В 2014 году он написал новую серию статей Networking Physics, в которой описал другие техники для синхронизации симуляции физики.
Предотвращение читерства
Существует две основные техники предотвращения читерства.
Первая: усложнение отправки читерами вредоносных пакетов. Как сказано выше, хорошим способом её реализации является шифрование.
Вторая: авторитарный сервер должен получать только команды/ввод/действия. Клиент не должен иметь возможности изменять состояние на сервере, кроме как отправкой ввода. Тогда сервер каждый раз при получении ввода должен перед его применением проверять его на допустимость.
Логика приложения: заключение
Рекомендую вам реализовать способ симуляции больших задержек и низких частот обновления, чтобы иметь возможность протестировать поведение своей игры в плохих условиях, даже когда клиент и сервер запущены на одном компьютере. Это сильно упростит реализацию методик сглаживания задержек.
Если вы хотите изучить другие ресурсы, посвящённые сетевым моделям, то их можно найти здесь:
Читайте также: