forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Сеть в играх. (http://forum.boolean.name/showthread.php?t=9816)

Данил 08.11.2009 20:25

Сеть в играх.
 
Стало интересна сфера игр многопользовательских.

сделал простейший пример -
есть сервер, есть клиент.
Разница между ними только та, что сервер - основная программа, а клиент - подключается к серверу.

Суть программы - это то, что имеется два объекта. Одним управляет игрок за сервером, другим - игрок за клиентом.

Как работает программа -
Объект сервера имеет переменные - Х, У, Скорость, Поворот.
И объект клиента имеет точно такие же переменные.

На сервере мы управляем одним объектом, затем посылаем клиенту Х,У,поворот нашего объекта.
Клиент их принимает, и рисует в нужной области с нужным поворотом объект, затем управляет своим объектом, и те же данные посылает серверу. Сервер же так же рисует.

Т.е. такая система -одним управляем, второй тупо рисуем по полученным данным.

Отправка и прием идет каждым циклом. отправляется, как я понял, за цикл - 8 байтов.

На деле же эта система передачи - наитупейшая.

Как вообще реализуется передача данных? Как правильно делаются игры многопользовательские?

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

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

jimon 08.11.2009 20:34

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

при выстреле клиент передает данные на сервер, сервер отматывает время до того момента когда ты стрелял и смотрит попал ли ты или нет, клиент в это время уже играет анимацию смерти и тд, потом сервер передаёт всем результаты

в стратегиях такие мудрости не нужны, возможно что используется передача команд игрока всем другим игрокам и игрок как бы играет "виртуально", а всё остальное регулирует сервер

а как в гонках даже не знаю

ps. всё это очень и очень сложно, за две ночи не напишешь, тут месяц надо убить чтобы достичь приемлемого качества

Tadeus 08.11.2009 21:10

Ответ: Сеть в играх.
 
GoodWin давал когда-то ссылочку:
http://www.hl-inside.ru/articles/mul...er-networking/

Nex 09.11.2009 07:51

Ответ: Сеть в играх.
 
Мне вот тоже интересно, как делать "нормальную" сеть между клиентами и сервером и создание нормального ИИ хотя бы как в примитивной стрелялке (что бы стены обруливали и выле себя хотя бы, как "тупой" игрок :-)) ... :)

Данил 09.11.2009 21:49

Ответ: Сеть в играх.
 
Попробовал сделать сеть.
Все просто - клиент, сервер.
Просто летаем на кубиках.
На неограниченное количество человек.

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

moka 10.11.2009 03:16

Ответ: Сеть в играх.
 
Сервер должен иметь много частей. Такие как:
- Менеджер пользователей.
- Менеджер объектов.
Разные оптимизации, отвечающие за выбор участка информации, которую нужно передавать, и т.п.
В менеджере пользователей, задача сервера, это управлять пользователями, и держать их "в курсе дела".
Естественно каждый клиент имеет ID.
Также и объекты в мире - каждый объект имеет ID - и он должен быть везде одинаковым.
Таким образом не сложно уже применять какие-то действия.
Пока лучше забыть о физике - там уж слишком всё сложно.
Но перемещение, реализовать не так и сложно.
Кстати посылка пакетов не каждый цикл, этого будет слишком много, тем более за продолжительность цикла, пакет даже не успеет дойти (средняя продолжительность цикла составляет 1000мс/60упс=19мс.)
Тут подход должен быть с аналитической стороны, с листками бумаги, и карандашом, чтобы это всё уложить в голове ;)

jimon 10.11.2009 03:22

Ответ: Сеть в играх.
 
MoKa
Цитата:

Но перемещение, реализовать не так и сложно.
ну-ну :) при пингах больше 500 мс начинаются танцы с бубном, а любительская система и 50-100 мс не выдержит

moka 10.11.2009 03:26

Ответ: Сеть в играх.
 
jimon, дык, а где ты видел играбельный реалтайм с 500мс. Если такой пинг, то обычно в играх, на серверах стоят лимиты, которые тебя просто автоматически диссконектят.
Систему можно подгонять, и варьировать. Я перемещение по TCP/IP (лондон<>питер), реализовывал в 120пинга, а это примерно максимум, выше уже начинаются лаги, но ниже этого - играбельно в любую современную игру.

Данил 10.11.2009 22:17

Ответ: Сеть в играх.
 
На счет пингов пока даже и не задумывался, у меня передача / отправка идет каждым циклом. Хотя, думаю, может поставтиь тупо таймер на сервере и все?

Немного стал понимать все же всю архитектуру, уже как минимум сделал регистрацию клиентов на сервере...

Ky3R_94 12.11.2009 22:10

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

Tormaz 12.11.2009 22:38

Ответ: Сеть в играх.
 
Цитата:

Сообщение от Данил (Сообщение 124157)
Хотя, думаю, может поставтиь тупо таймер на сервере и все?

Это вовсе не тупо , а просто необходимо. И каждый пакет да и состояние сервера (кадр) желательно нумеровать :) к примеру от одного до тридцати( по количеству тиков в секунду которые тебе надо выбрать) так гораздо легче понять устаревший это кадр или нет , это если ты конечно динамичную игру делаешь . Сервер контры к примеру сохраняет данные кадры на сервере и сранивает твои действия в соответствии с твоим временем те номером твоего кадра, как правильно заметил jimon.
Поэтому если на сервере есть "лагер" :-D то ты можешь от него за угол упрыгать а сервер тебе пришлет пакетик нееет дружок ты убит и вытащит твой трупик назад :-D назад так сказать в прошлое изза тормоза ..
Вот тебе ссылочка http://developer.valvesoftware.com/w..._Networking:ru
Это пример так сказать одного из самых требовательных шутеров где точность достигается пожиранием ресурсов проца и сети на стороне сервера.
А коли ты ммо задумал делать то там и требования немного другие там немного попроще все поскольку при таком количестве клиентов и точности контры никакого кластера не хватит. Почитай по ссылке а я потом еще отпишусь , уж очень я люблю на эту тему поболтать :)
Перед разработкой ммо ты должен решить для начала какие задачи ты отдашь клиенту (вопрос безопасности и читерства) а какие будешь решать на сервере (вопрос загруженноси сервера )
К примеру контроль передвижения , контроль попадания, контроль урона, короче говоря каждое предполагаемое тобой действие в игре. Каким образом будет происходить перемещение игрока, т.е. насколько оно свободно ?
Реши сколько раз ты будешь синхронизировать состояние сервера и клиента в секунду. Короче говоря все не так уж и сложно.

Кстати а в контру здесь народ играет ?

Данил 12.11.2009 23:12

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

Я же все проще хотел сделать.
Чтобы сервер не проводил кучу расчетов, а просто был ... хм... проргаммой, которая связывала бы игроков :)
Т.е. в моем случае я думал сделать , чтобы, допустим ,каждые 50 миллисекунд клиент получал позиции объектов ( допустим, ближайших объектов). В пакете, допустим ,входили такие данные, как позиция объекта, поворот объекта, и команды объекта. Т.е. как - чтобы клиент ставил объект в нужном месте в нужном повороте, а потом просто эти 50 миллисекунд двигал объект по командам, команды в данном случае - то ,что нажимал другой клиент.

Но ,как понимаю, моя система - идиотизм?

jimon 12.11.2009 23:49

Ответ: Сеть в играх.
 
Данил
по твоей схеме не добиться ощущения присутствия

impersonalis 13.11.2009 00:36

Ответ: Сеть в играх.
 
уорниг метаморфирование ника детектед!
Tormaz

NitE 13.11.2009 00:48

Ответ: Сеть в играх.
 
impersonalis, баян...

Tormaz 13.11.2009 02:25

Ответ: Сеть в играх.
 
Цитата:

Сообщение от Данил (Сообщение 124564)
Т.е. в моем случае я думал сделать , чтобы, допустим ,каждые 50 миллисекунд клиент получал позиции объектов ( допустим, ближайших объектов). В пакете, допустим ,входили такие данные, как позиция объекта, поворот объекта, и команды объекта. Т.е. как - чтобы клиент ставил объект в нужном месте в нужном повороте, а потом просто эти 50 миллисекунд двигал объект по командам, команды в данном случае - то ,что нажимал другой клиент.

Да вроде , если я правильно понял , ты правильно думаешь. Но если ты будешь соединять таким образом не 2 игрока а более, то возникает проблема в разнице задержки пакетов от игроков и не постоянства этой задержки. Если твоя игра не требует точности передвижений , ну к примеру как Linege, то то что ты пишешь реализовать в принципе возможно. Там собственно тыкаешь мышкой а все остальное происходит на сервере. Сто раз в секунду мышку не тыкнешь , да и опрашивать ее можно 2 раза в секунду для такой игры достаточно. Я как то тоже думал загрузить бы клиентов по уши и пусть их сеть и компьютеры дымят :) считают все вплоть до ии . Каждый из игроков посылает пакет всем о своих действиях и все работает. А сервер существует только для коннекта и дисконнекта. Но в таком случае очень велик шанс читерства. Твой компьютер расчитывает , что ты попал ты шлешь клиентам инфу о попадание, а он тебе отвечает А Я В ТАНКЕ поскольку клиент взломан и персонаж неубиваем. И даже если проект не коммерческий жалко ведь будет. Запустишь бесплатно сервер а всякая гадость испортит всю игру и убьет все труды.
Можно конечно делать контроль на читерство на нескольких машинах, проверять возможность действий и сравнивать результат. Это очень интересно.
Но синхронизировать всех будет трудно.
Но для начала создай выделенный сервер. Реши сколько раз в секунду будешь обновлять инфу и начинай уже писать простенькое приложение соединяющее нескольких клиентов.Просто передавай координаты и направление и обновляй их на клиентах. Потом займись плавным передвижением.
Правда с протоколом в блитце напряг. Один выбор UDP. TCP не пойдет так как сервер висеть будет до прихода пакета а поток для него не выделишь ибо блитц и если клиент отрубится то навечный зависон гарантирован.
Но страшного ничего нет. Пакеты UDP не теряются и приходят по порядку , если ты не северный с южным полюсом соединяешь да и там потери исключены это все страшилки и мифы , не гарантируется но доставляется все нормально. Так что на этом не заморачивайся.

Первая моя программа такого типа это были шарики скользящие по земле :-D .
Так что не идиотизм а интересная мысль но трудноисполнимая. сначала делай как все а потом глядишь и будешь первопроходцем с какой нибудь новаторской идеей ))
Коннект к серверу осуществить можно на еще одном выделенном порту для этого. Можно все сделать на одном порту. Разработай протокол обмена инфой сервера и клиента.

tormoz 13.11.2009 07:01

Ответ: Сеть в играх.
 
http://forum.boolean.name/showthread...598#post124598

Tormaz 13.11.2009 12:24

Ответ: Сеть в играх.
 
запустил посмотреть сервер 30 % проца скушал :( написано так понимаю на блитце ? мангос 2 % запущен та том же компе онлайн 12 человек.

jimon 13.11.2009 23:31

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

Tormaz 13.11.2009 23:37

Ответ: Сеть в играх.
 
А затем, что как только попадается мне сервер :) я сразу смотрю сколько он кушает. И если сервер тратит 30% времени проца то не управляет ли этот сервер атомным реактором ,возникает вопрос ?
Что будет с ним если законектятся хотя бы 1000 человек и еще кричуры начнут двигаться , а то не дай бог думать :) ?
Это какой проц надо будет, если в холостую только 30 %. И если можно поподробней об отдать время системе ? Настроить какими средствами ? Я честно не очень в блитце разбираюсь. Или вы имеете ввиду приоритет в системе ?
Правда я думал , что лучше серверу время отдавать как можно больше.

jimon 14.11.2009 01:24

Ответ: Сеть в играх.
 
Tormaz
с чего ты взял что загруженность процессора и количество выполненной программой работы это одно и тоже ? загруженность процессора это то сколько времени программа будет отдавать системе и не более того

простейший пустой цикл на blitz3d :
Код:

while true
wend

будет сжирать все ресурсы одного ядра (загруженность 100% для одно ядерных процессоров и 50% для двух ядерных, для 4 ядерных - 25% и тд)

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

Код:

Что будет с ним если законектятся хотя бы 1000 человек и еще кричуры начнут двигаться , а то не дай бог думать  ?
Это какой проц надо будет, если в холостую только 30 %.

минимальные знания оценки производительности программ позволяют сразу сказать что такие размышления это бред, нужно брать во внимание сервисные издержки кода, порядок зависимости от количества клиентов и тд, так что при 1 клиенте может быть 30%, при 20 - 40%, а при 1000 всего 45%

так что не занимайся эзотерическими вещами

Tormaz 14.11.2009 01:29

Ответ: Сеть в играх.
 
простейший пустой цикл на blitz3d :
while true
wend
будет сжирать все ресурсы одного ядра (загруженность 100% для одно ядерных процессоров и 50% для двух ядерных, для 4 ядерных - 25% и тд)

Ты это все серьезно ? Или ты это меня разводишь ?;) Если разводишь то держи ответ - 30% это 3х ядерный проц :) И если запустить на 2ядерном проце 3 пустых цикла то системе придется отказаться от от одного из них.
Я и говорю что сервер кушает очень много времени проца а не тепла там или еще чего.
Пустой цикл или нет я не знаю к сожалению так же как и проц . Если он там пустые по логике циклы гоняет то понятно где собака зарыта, значит есть запас. :)

Tormaz 14.11.2009 01:59

Ответ: Сеть в играх.
 
Аааа черт возьми я только что запустил 4 и еще мангос сервак не вырубил. Разделила системка ровно 22-24. Но в принципе это ничего не заначит поскольку ты прав висяк жуткий. А как с этим бороться ? Как отдать время системе ?

jimon 14.11.2009 02:26

Ответ: Сеть в играх.
 
Tormaz
вызывать delay 1 (1 тут означает 1 миллисекунду, можно и 5 поставить), по-сути это делает задержку на 1 миллисекунду, во время задержки менеджер задач ставит на выполнение другие потоки, таким образом ты отдал время системе, совсем не обязательно что реальная задержка будет ровно 1 миллисекунду, она может быть и 10 миллисекунд

Tormaz 14.11.2009 02:32

Ответ: Сеть в играх.
 
Ну сколько отдать понятно. Интересненько.. спасибочки ... щас достанем этот жуткий блитц ))) и снова помучаем..

Отлично выходит и входит. Если можно последний вопрос ? Откуда я должен знать что delay отдает время системе а не крутит пустые циклы ? В том смысле где посмотреть я это был должен раньше, до того как задал этот тупой вопрос?

jimon 14.11.2009 03:35

Ответ: Сеть в играх.
 
Tormaz
я не виноват что в справке это не написано :)

Damp 21.11.2009 18:13

Ответ: Сеть в играх.
 
Во многих случаях можно обойтись без тиков. Какраз сейччас делаю такую стреллялку, где координаты и углы передаются относительно событий клавы и мыши, без таймера.
Если просто:
Игрок жмет на кнопу "вперед", формируется пакет, условно - "Игрок Вася начиннает движение врепед из точки X:Z и c углом Yaw". Пакет уходит на сервер, сервер ни чего не считая рассылает это на всех. Так он начинает двигаться у всех. Пока Василий держит кнопку ни чего не отсылается. Отпускает кнопку, отсылается пакет "остановка игрока Вася в точке X:Z".
В пределах пинга 300-500 все работает вполне сносно. Всреднем игрок совершает 1 событие в 2-3 секунды, каждый пакет 6-10 байт (полезной информации + где-то 100 байт съедает сам TCP), это здорово экономит трафик относительно тиковой схемы.

jimon 21.11.2009 18:30

Ответ: Сеть в играх.
 
Damp
а если пинг будет не стабильным, а прыгать от 10 до 1000 плюс еще потеря пакетов 25% то твоя система не сможет добится одинаковой картинки у всех игроков, а одинаковая картинка это самое важное в сетевых играх

Damp 21.11.2009 19:21

Ответ: Сеть в играх.
 
Пинг так прыгает только на гпрс )) , у 3-х человек тестил с интернетом по проводам, всреднем от 70 до 300..400.
Такая схема может включать и пингкомпенсацию, 2-ух видов: задержка исполнения команды на своем клиенте и дельтатайминг у всех остальных (для этого каждый пакет дополняется информацией о пинге данного клиента).
Конечно контры так не сделать, тк перс может идти только либо по прямой, либо по дуге с определенным радиусом, но что-то аркадно вполне, только что играли :)

ABTOMAT 16.12.2009 20:54

Ответ: Сеть в играх.
 
Цитата:

Сообщение от impersonalis (Сообщение 124572)
уорниг метаморфирование ника детектед!
Tormaz

Вот кстати интересно как это выглядит со стороны правил форума.

impersonalis 16.12.2009 20:57

Ответ: Сеть в играх.
 
Цитата:

Сообщение от NitE (Сообщение 124573)
impersonalis, баян...

учи олбанскей (ну никак не клеится слово "боян" сюда).

St_AnGer 29.04.2011 09:51

Ответ: Сеть в играх.
 
Доброго времени суток, Булчане! Что бы не плодить темы спрошу тут.
Написал программу сервер и программу клиент. Основаны на UDP протоколе.
И вот собственно сам вопрос - что нибудь реально сделать если у меня закрыты для доступа из вне нужные мне порты (как оказалось после проверки - закрыты они у меня все, но нужны конкретно - 57015 и далее)? Потому что от меня пакеты исходят прекрасно и доходят до сервера, а вот от сервера ко мне на клиент ничего пробиться не может. Теоретически понимаю что наверно я сижу за NAT'ом (даже не наверно, а 100500% уверенности в этом), но как его обойти...

Обрыл весь форум в поисках информации по протоколу UDP и вообще созданию сетевых приложений (огромное спасибо Tadeus'у за хорошие туториалы по TCP/IP и UDP, и всем кто в далёком 2009-м отписывал конкретно в этой теме), долго курил статью о работе стевой части Valve Source Engine, вынес для себя много полезного. Даже помучал IdTech 2 (что тоже оказалось очень полезно, так как текущую структуру сервера своего постарался взять от туда). Но конкретно по этой проблеме так ничего и не увидел.

Используемый провайдер - мегафон (не смейтесь только, другим интернетом не располагаю в данный момент). В Counter-Strike и World of Tanks через него играю свободно (ну, относительно, пинг высоковат... но дело не в этом), а они работают на UDP протоколе. Т.е. проблема решаема, просто я не знаю где и с чего начать поиск.

Мне нужна только теория, ненужно исходных кодов (хочу разобраться, хотя если есть исходники - тоже не откажусь). Буду очень признателен если поможете, форумчане.

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

baton4ik 29.04.2011 10:20

Ответ: Сеть в играх.
 
Дело в том, что у тебя локальная сеть, поэтому, когда клиент обращается к серверу по ip, непонятно, какому компьютеру из локальной сети передавать запрос. Для этого в роутерах есть возможность перенаправлять порты порты (forwarding). Гуглишь гайд для своего роутера (или разбираешься сам) и настраиваешь перенаправлание на нужный тебе внутренний ip.
К примеру, в моей UDP-поделке сервер использует порт 25565, в роутере настроено перенаправление на внутренний IP 192.168.1.100

Nex 29.04.2011 10:36

Ответ: Сеть в играх.
 
Объясните как с помощью линейного метода устранить эффект запаздывания.
Цитата:

Новое Положение =Старое Положение + Скорость*Время
Вроде бы все просто, но ничего не выходит.. И что есть "Время".. пинг?

St_AnGer 29.04.2011 19:39

Ответ: Сеть в играх.
 
Цитата:

Сообщение от baton4ik (Сообщение 186986)
Дело в том, что у тебя локальная сеть, поэтому, когда клиент обращается к серверу по ip, непонятно, какому компьютеру из локальной сети передавать запрос. Для этого в роутерах есть возможность перенаправлять порты порты (forwarding). Гуглишь гайд для своего роутера (или разбираешься сам) и настраиваешь перенаправлание на нужный тебе внутренний ip.
К примеру, в моей UDP-поделке сервер использует порт 25565, в роутере настроено перенаправление на внутренний IP 192.168.1.100

учимся внимательно читать пост... У меня Мегафон, а это оператор сотовой связи. Я просто привёл пример, что по локалке всё пашет. А по инэту - нет. Мегафон и ноут соединены напрямую, без всяких роутеров!

Crayzi 30.04.2011 21:53

Ответ: Сеть в играх.
 
Вложений: 1
Цитата:

Сообщение от St_AnGer (Сообщение 186983)
Доброго времени суток, Булчане! Что бы не плодить темы спрошу тут.
Написал программу сервер и программу клиент. Основаны на UDP протоколе.
И вот собственно сам вопрос - что нибудь реально сделать если у меня закрыты для доступа из вне нужные мне порты (как оказалось после проверки - закрыты они у меня все, но нужны конкретно - 57015 и далее)? Потому что от меня пакеты исходят прекрасно и доходят до сервера, а вот от сервера ко мне на клиент ничего пробиться не может. Теоретически понимаю что наверно я сижу за NAT'ом (даже не наверно, а 100500% уверенности в этом), но как его обойти...

Обрыл весь форум в поисках информации по протоколу UDP и вообще созданию сетевых приложений (огромное спасибо Tadeus'у за хорошие туториалы по TCP/IP и UDP, и всем кто в далёком 2009-м отписывал конкретно в этой теме), долго курил статью о работе стевой части Valve Source Engine, вынес для себя много полезного. Даже помучал IdTech 2 (что тоже оказалось очень полезно, так как текущую структуру сервера своего постарался взять от туда). Но конкретно по этой проблеме так ничего и не увидел.

Используемый провайдер - мегафон (не смейтесь только, другим интернетом не располагаю в данный момент). В Counter-Strike и World of Tanks через него играю свободно (ну, относительно, пинг высоковат... но дело не в этом), а они работают на UDP протоколе. Т.е. проблема решаема, просто я не знаю где и с чего начать поиск.

Мне нужна только теория, ненужно исходных кодов (хочу разобраться, хотя если есть исходники - тоже не откажусь). Буду очень признателен если поможете, форумчане.

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


Если ничего не получится то попробуй RakNet, оно вроде с NAT-ом дружит...

St_AnGer 30.04.2011 23:21

Ответ: Сеть в играх.
 
Crayzi, большое спасибо за указание на этот враппер! Ответ от сервера пробился даже через два роутера со стороны клиента! Жалко нельзя ставить сотню спасибок, поставил бы сразу! :)


Часовой пояс GMT +4, время: 17:48.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot