Войти
Urho3DФорумЗАДАВАЙТЕ ВОПРОСЫ

Сеть

Страницы: 1 2 3 Следующая »
#0
14:03, 31 мар. 2016

Что-то я не понимаю. Функция Network.Connect() всегда true возвращает, что ли? Если да, то зачем делать её bool.
Суть такова - при Connect("localhost") всегда true. Каким образом определить, произошло ли подключение к серверу, непонятно.
В примере SceneReplication сделано хитро - наличие подключения к серверу определятся по тому, запущен ли сервер:
network->GetServerConnection() - всегда возрващается соединиение с сервером, даже если сервер ещё не запущен.
network->IsServerRunning() - это возвращает ненулевое значение, если создан сервер StartServer();
т.е. косвенным путём. Разве это нормально, что network->Connect() == true всегда? Куда он коннектится, если сервер не создан?

Да, и пример кода.

GetSubsystem<Network>()->Connect("localhost", 1234, gScene);

Как мне теперь определить, создано ли соединение с сервером?


#1
14:32, 31 мар. 2016

Ну ясно, короче. Network->Connect(), естественно, лишь запускает процесс соединения. Дальнейшее общение с сервером, в том числе и об ошибках, происходит через события. В примере просто упростили, если я правильно понял.
А Network->Connect() возвращает bool на тот случай, если система не позволяет создать соединение.

#2
0:23, 3 апр. 2016

Работа с сетью всегда делается асинхронной для того, чтобы твоя игра не зависала, ожидая завершения операций

#3
13:40, 15 апр. 2016

Парни, что-то не могу понять, как работает многопользовательская игра.
Допустим, хочу сделать Q3. За основу беру 17_SceneReplication. Там и клиент и сервер. Клиента запускает игрок на своей машине, сервер стоит отдельно, на удалённом физическом сервере без видеокарты.
Как же оно работать будет и правильно ли я представляют схему?

#4
13:48, 15 апр. 2016

уф, ты такой вопрос задаешь, что на него можно только ответить "по разному" ))

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

#5
13:53, 15 апр. 2016

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

#6
14:05, 15 апр. 2016

1vanK
Про пример я понимаю - в движок уже встроена необходимая функциональность для создания защищённого от читерства шутера.
И про сервер я понимаю, что на нём нужно всё считать. Я не понимаю, как сервер можно написать вне движка Urho3D - ведь на нём должна храниться образцовая сцена (состояние которой копируют все клиенты).
Тот же пример 17 - разве его можно запустить на сервере - ведь в ём нету OpenGL?

#7
14:10, 15 апр. 2016

> Про пример я понимаю - в движок уже встроена необходимая функциональность для создания защищённого от читерства шутера.

что за штука такая? о0

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

> Я не понимаю, как сервер можно написать вне движка Urho3D - ведь на нём должна храниться образцовая сцена (состояние которой копируют все клиенты).

не надо вне движка сервер создавать, движок можно использовать в режиме headless, то есть без вывода на экран (без рендеринга)

#8
14:18, 15 апр. 2016

1vanK
> > Про пример я понимаю - в движок уже встроена необходимая функциональность для создания защищённого от читерства шутера.
> что за штука такая? о0
Это то, про что ты писал - клиент лишь посылает нажатия кнопок серверу, сервер изменяет состояние сцены в каждом клиенте (движок делает это самостоятельно)
1vanK
> движок можно использовать в режиме headless, то есть без вывода на экран (без рендеринга)
Вот про это я и спрашиваю. "Headless". Спасибо.
Долго же я бошку ломал. По коду найти не получилось)

#9
9:44, 26 мая 2016

Попробовал пример Replication запустить на удалённом сервере. Ситуация достаточно удручающая.
Запустил три клиента на одном компьютере (сервер удалённо находится). Два ездят нормально, на третьем артефакты. При этом процессор загружен на 75%, исходящий трафик от каждого клиента порядка килобайта, входящий 25кБ. Сервер практически простаивает. При увеличении количества клиентов входящий трафик растёт нелинейно, как мне показалось.
Сделал вывод, что репликация эта - фуфел. Даже по трафику - если как в танках 15х15, получается минимум 25 * 30 = 750 кбайт/с. А это ведь простейшая сцена.
Для сети в движке предоставлен лишь интерфейс - соединение и обмен сообщениями. А писать всё придётся самому. Да?

#10
10:54, 26 мая 2016

Продолжу свои рассуждения чайника.
Пример у меня, оказывается, не SceneReplication, а тот, где машинка с физикой, я его доработал в сетевой вариант. Так вот, я 17_SceneReplication подключил к серверу с машинкой и увидел в нём колёсики.
Т.е. репликация эта объекты по сети гоняет. Вместе с текстурами, как я понял. Может, я не прав?

У меня просьба потестить в "реальных условиях" пример. Вот ссылка http://188.120.239.61/media/distr/TankistWaTclient.exe . Там установочный файл для Win7 x64. С деинсталлятором.
Не факт, что заработает, но если VS 2013 установлена, то должно пойти (redist в комплекте, но, похоже, не помогает).
Скачайте, проверьте, если заработает, договоримся о времени, когда дружно зайдём. Или просто не закрывайте программу.

Ярлыка не будет, запускать TankistWaTclient.exe из папки, куда установлено (с:\Games)

#11
11:00, 26 мая 2016

Можешь попробовать подправить потоковую передачу данных и слать данные в сжатом виде. Эта штука юзалась даже MUDах (древние текстовые онлайн РПГ) и там надо было многим клиентам слать кучу трафика. Гугли на тему MCCP.  Этот протокол рассчитан на telnet, поэтому шлет разные управляющие символы, сигнализирующие о сжатом потоке, в твоем случае будет еще проще - просто сжатый поток гонишь.

Как поток сжимается на сервере смотри https://bitbucket.org/bylins/mud/src/3d4d0265f12aa4e36ea630777f5c… -view-default
(весь код, обрамленный дефайнами HAVE_ZLIB)

А как клиент распаковывает, можешь глянуть https://github.com/1vanK/Constructor-2/blob/master/Ядро/Соединени… компрессор.cs (правда на сишарпе)

#12
11:05, 26 мая 2016

1vanK
Посмотрю, спасибо. Но, мне кажется, это не самое оптимальное решение. Избыточные данные остаются, хоть и в сжатом виде.

#13
11:05, 26 мая 2016

> Т.е. репликация эта объекты по сети гоняет. Вместе с текстурами, как я понял. Может, я не прав?

я тебе не глядя в код 100% скажу, что текстуры по стети движок не гоняет)

> Не факт, что заработает, но если VS 2013 установлена, то должно пойти (redist в комплекте, но, похоже, не помогает).

чтобы не было такой проблемы, включай опцию URHO3D_STATIC_RUNTIME в CMake, тогда эта либа будет прямо в экзешник линковаться

#14
11:10, 26 мая 2016

1vanK
> чтобы не было такой проблемы, включай опцию URHO3D_STATIC_RUNTIME в CMake, тогда эта либа будет прямо в экзешник линковаться
Да, спасибо, действительно. Изначально так и хотел сделать, потом отказался. Не помню, то ли компилироваться не хотело, а скорее времени много линковка занимает.

Страницы: 1 2 3 Следующая »
Urho3DФорумЗАДАВАЙТЕ ВОПРОСЫ

Тема в архиве.