2008-10-17 2 views
12

Каким образом протоколы UDP и TCP используются в связи с клиентом и сервером MMORPG?MMORPG Клиентское/серверное кодирование

Например:

ли клиент вещания (позиция игрока, и т.д.) через UDP на сервер? или наоборот?

Или это больше похоже на использование TCP, где Клиент запрашивает, чтобы сервер перемещал плеер. Сервер получает запрос, перемещает игрока и отправляет обратно клиенту, что игрок сейчас находится в позиции xyz?

Каналы чата должны быть реализованы с использованием TCP?

Есть ли хорошие статьи/книги по этому вопросу? Я нашел кусочки, но кажется, что реальное мясо и картофель выиграны по опыту.

ответ

1

Половину вашего вопроса (используемые протоколы транспортного уровня) можно было бы ответить, установив wirehark и посмотрев на трафик.

0

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

0

Ваш лучший выбор - это, вероятно, взглянуть на сетевой код Planeshift, это MMO с открытым исходным кодом. Я считаю, что это самое развитое на сцене (последнее я проверил).

8

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

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

В любом случае, сочетание UDP и TCP было бы уместным - вам просто нужно спросить себя: «Я хочу, чтобы надежность или скорость?»

4

Существует множество различных вариантов реализации, но по большей части они будут выглядеть так. Этот шаблон повторяется почти с любым действием в игровом мире.

  1. Клиент связывается с сервером, который игрок хочет переместить.
  2. Клиент отображает движение игрока в соответствии с тем, что, по его мнению, должно произойти.
  3. Сервер подтверждает, что перемещение - это то, что может произойти, учитывая местоположение игрока.
  4. Сервер обновляет клиент относительно того, где находится игрок, насколько это касается сервера.
  5. Клиент обновляет позицию игроков, чтобы отразить мировое состояние сервера.
1

Возможно, вас заинтересует Project Darkstar. Это структура MMO с открытым исходным кодом.

+0

Я думаю, что это [RedDwarf Server] (http://www.reddwarfserver.org/) сейчас. Просто чтобы это было актуально. – 2012-05-29 20:14:56

4

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

Клиент должен отправлять запросы только на движения и т. Д., А серверу необходимо проверить требования, чтобы убедиться, что они не нарушают правила игры. Сервер должен только отправлять данные обратно, которые нужны клиенту, - вы не можете полагаться на клиента, чтобы получить кусок мировых данных и просто отфильтровывать все, что игрок не может наблюдать в данный момент. Кто-то получит дополнительную информацию и использует ее.

Если игра должна быть «в режиме реального времени», то клиент должен предположить, что сервер будет разрешать запросы на перемещение и соответственно обновлять отображение - и откатывать движение, если сервер исправляет его позже. В большинстве случаев клиент и сервер согласятся, и все будет плавно. Они не согласятся, когда клиент пытается обмануть (в любом случае это их вина) - или клиент плохо себя чувствует из-за плохой связи (мало что вы можете с этим сделать).

0

Я не думаю, что есть короткий ответ на этот вопрос, он довольно широк в своем объеме. Тем не менее, несколько моментов:

  • Не нужно «транслировать» только потому, что вы используете UDP. По моему опыту, UDP в большинстве случаев является точка-точка.
  • Совершенно можно выполнять собственные «защищенные» коммуникации через UDP, вам не нужно использовать TCP. Это не волшебство, просто ... умное и запутанное. :) Но по большей части, как вы подразумеваете, TCP не подходит для общения в реальном времени в играх.
  • Есть способы сделать TCP более подходящим, например, искать «алгоритм Nagle».
  • Вы можете общаться через UDP, если вы уже свернули свой собственный транспортный протокол без потерь. Много игр к этому.

В Gamasutra появились статьи о сети, но сейчас у меня нет никаких ссылок. Не уверен, что они все еще открыто доступны, извините.

1

Я думаю, вы можете узнать много от чтения, как другие реализовали эти типы систем. В этом напрасно, я могу указать вам на работе Тим Суини и крокет Консорциум

  1. Unrea Networking Architecture
  2. The Croquet Project

бумаг Тима Свини трансформированные, как я думал о программировании. Я не могу рекомендовать их достаточно.