Какие распространенные методы используются в игровых сетях? - PullRequest
0 голосов
/ 30 августа 2011

Итак, я пишу довольно простую игру с очень низкими требованиями к сети, я использую TCP.

Я не уверен, с чего начать даже при определении / реализации протокола для использования клиентом и сервером. Я осматривался и видел несколько примеров, например, Minecraft от Mojang, который использует таблицу «команд», которую клиент отправляет серверу, а сервер отправляет клиенту с количеством аргументов и тому подобным.

Какой хороший способ сделать это? Я слышал жалобы на протокол Minecraft, потому что, если вы перезагружаете байт, вы разрушаете весь поток.

Ответы [ 5 ]

2 голосов
/ 30 августа 2011

Сетевые игры - это широкий вопрос, в зависимости от того, какую проблему вы решаете.TCP (может) даже не будет правильным выбором для вас.

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

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

В целом, я считаю серию Гленна Фидлера о разработке сетевой игры фантастическим чтением.Я бы начал здесь.Он охватывает все основы использования UDP для игр.

Если вы хотите использовать TCP просто для того, чтобы разобраться с TCP - тогда Minecraft - разумный пример.Известный список команд, которые можно отправлять туда и обратно, - это простой способ запуска.Однако, как вы заявили, склонен к некоторым проблемам.Это больше согласуется с использованием неправильного протокола, чем с тем, как он был разработан.

0 голосов
/ 01 сентября 2011

Поскольку вы кодируете в lua, единственная библиотека, которую кто-либо использует, это luasocket (хотя ZMQ набирает силу).

У вас действительно будет несколько протоколов: TCP для данных, которые должны быть получены (например, серверные команды, такие как changemap или you_got_kicked, разговоры и т. Д .; затем используйте UDP для необязательных данных или данныхсрок действия которого быстро истекает (например, позиции персонажей).

0 голосов
/ 31 августа 2011

На сетевом форуме Gamedev.net есть отличный FAQ, охватывающий подобные вопросы и многие другие, однако, чтобы сделать это не просто ответом «пойди-посмотри-что», я предложу вам небольшие улучшенияможет сделать.При использовании tcp доставка гарантируется, но это требует затрат на скорость, что хорошо, если вы не делаете fps, но это означает, что вам нужно получать больше от данных, которые вы отправляете, отличный способ сделать это через deltas /дифференциалы, то есть, отправляя только изменение состояния, а не все игровое состояние, вы также можете проверять свои входящие пакеты на наличие поврежденных / аномалий данных и проверять tcp, прогнозируя возможности, и с тем же прогнозом вы можете сократитьеще больше данных и т. д. Но, как уже говорили другие, это широкий вопрос, и он не подходит для получения истинно полезных ответов

0 голосов
/ 30 августа 2011

Я думаю, это зависит от того, какая у вас игра, какая у нее механика, какая информация необходима. В любом случае, я думаю, что этот стек https://gamedev.stackexchange.com/ больше подходит для ответа на ваш вопрос.

0 голосов
/ 30 августа 2011

Google "библиотека сетевых игр", и вы получите кучу результатов. Было бы неплохо посмотреть на GNE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...