DioD
offline
Опыт:
45,184Активность: |
DeSync
Решил вот рассказать что такое десинк чем он вызван и как его избежать, но вот статьи писать не умею...
Ближе к делу - задавайте вопросы.
Десинк хоста вызывает отключение всех игроков. Отредактировано DioD, 16.01.2007 в 19:33. |
16.01.2007, 16:52 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
Код:
|
16.01.2007, 19:29 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
десинк хоста это действия на машине хоста в обход сетевого трафика, машина считает что это все остальные игроки хитрят, и разъединяет, хотя это совсем не так. |
16.01.2007, 19:32 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
tysch_tysch
Работаем
offline
Опыт: отключен
|
Хитрят? т.е. десинк - это некая защита от читерства? |
16.01.2007, 19:45 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
само собой, вот сам подумай, ты отредактировал память и начитерил себе мильон золота, как можно тебя наказать кроме дисконекта? |
16.01.2007, 19:49 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
23,587Активность: |
DioD, я бы не делал столь поспешных выыодов. Сопоставление данных необходимо скорее для уменшения объема траффика. Т.е. все происходит так, что данные передаются между машинами только в ключевые моменты, в остальное же время все данные для всех игроков прощитываются на каждой машине автономно (кроме рандом значений естессно). Т.е. , например, один из игроков построил героя, всем остальным передается инфа о том что создан герой и его экспиренс равен 0, затем когда герой убивает юнитов, то рассчет опыта у данного героя ведется на каждой машине отдельно и не сверяется после каждого убитого крипа. И если наш игрок с героем решит почитерить и добавить экспиренса, то сначала ничего не произойдет, т.к. данные о новом экспиренсе будут только у него, но вот как только герой получит лвл, то произойдет передача данных о лвлап-е героя другим компам, но по их рассчетам он еще не должен повысить лвл. Вот тогда и возникает десинк.
Т.е. я считаю десинк это сугубо практичная весчь, ведь если бы каждое значение всегда сверялос, то я повесился бы на сетевом кабеле или продался в рабство провайдеру. |
16.01.2007, 23:20 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
увы контрольные значения передаются после каждого действия.
нанесён урон - трансляция - умер ли юнит
не умер == десинк
так как у хоста он умер
или наоборот, у хоста юнит имеет на 100 хп больше, у всех умрёт, у него нет, вот всех и кикнет из игры. |
17.01.2007, 06:23 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
nic666
offline
Опыт:
4,012Активность: |
Цитата:
Если ты имеешь ввиду триггеры, то они вообще ВСЕ выполняются только на сервере... По сети передается только инфа о событиях, но не о действиях... причем количество событий в игре гораздо больше, чем может обработать система триггеров... к примеру, даже скролл экрана это событие... В совою очередь сервер, кроме триггеров, выполняет еще процедуру проверки событий... и если событие считается невозможным, точнее много событий,то происходит десинк... одиночные различия синхронизируются непосредственно передачей данных от сервера к клиенту... в случае если счетчик "невозможных событий" превышает порог, то клиент отключается - это и есть десинк... Это дает возможность читерства сервером.... если механизм проверки событий на возможность отключить, то можно на сервере делать все что угодно... nic666 добавил: Цитата:
ничего подобного! На сервер передаются события и все это обсчитывает только сервер. От сервера приходит команда "установить ХП в <значение>" |
||
17.01.2007, 10:03 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
На каком серевере? Сервера нет в и помине. Скрипты выполняются на каждой машине отдельно и сихронизируются... Если по твоему весь скрипт выполянется на стороне серевера, то как по твоему работает блок на клинетской машине: Код:
|
|
17.01.2007, 10:16 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
в варе пиринговая система, если хост выходит игра не кончается |
17.01.2007, 10:22 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
nic666
offline
Опыт:
4,012Активность: |
Цитата:
сервер выполняет все скрипты так, как если бы они работали у клиента... создается виртуальная среда для каждого клиента... дальнейший обмен данными это событие от клиента-> на сервер реакция от сервера-> клиенту При этом каждый клиент имеет полную копию данных по каждому игроку, поэтому если хост уходит, то система обработки триггеров на клиенте перезапускается т.е. все начинает работать только на клиенте... Вы можете проверить, что триггер прерывается при выходе хоста... Это и говорит о перезапуске системы обработке триггеров у клиента при его выходе... |
|
17.01.2007, 11:04 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Позовите кто-нить НТ... =) Он доходчиво объяснит... |
17.01.2007, 11:24 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
NETRAT
offline
Опыт:
83,762Активность: |
Насколько мне известно, в варе сервер - достаточно уловное понятие. Скрипты выполняются локально и постоянно синхронизуются. Действие, вызванное на компе одного из игроков вызывает событие на каждом из компов, поэтому, скажем, если действие применяется к обьекту, который существует не на всех компах, это и порождает разрыв соединения.
Можно считать что это защита от читерства, однако, в любой программе могут быть ошибки, которые просто невозможно исправить ибо непонятно как их исправлять, в таких случаях просто ставится точка выхода. То же самое и при десинхронизации - непонятно как синхронизовать данные - с каким компом - как устанавливать жизни юнита, который на одном компе существует, а на другом - нет (в играх, ориентированных на сервер, данные всегда берутся с сервера и считается что они единственно верные), поэтому в случае десинхронизации мы получаем точку выхода, которая явно сигнализирует о некорректном скрипте карты.
В варе не используется сервер как таковой, иначе в случае выхода сервера все бы умирало (иначе должна происходить смена сервера - это дополнительный же траффик и геморрой) и это дополнительная нагрузка траффика на сервер - если бы сервер был не очень быстрый, то лагало бы все. При выходе игрока он просто исключается из списка синхронизуемых компов. |
17.01.2007, 16:33 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
всё равно одна из машин ведущая |
17.01.2007, 16:56 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
23,587Активность: |
Цитата:
Ты сам себе противоречишь, т.е. ты утверждаешь что ВСЕ данные синхронизируются и в то же время говоришь, что десинк будет только когда юнит умрет. Т.е. по твойму данные о разности хелсов передаются, но в то же время не вызывают десинка. Противоречие? Да, так что на самом деле передается только демаг (т.к. рандомная величина) по юниту, а вот его хелсы обсчитываются отдельно. Десинк же вызовет лишь смерть юнита, т.к. данные о смерти передадутся между компами. Не веришь мне, проверь на примере опыта героя, как я писал в прошлом посте. Iron добавил: Цитата:
exploder, ты отчасти прав, но отчасти и нет. Есть все же некоторые нагрузки которые обрабатываются только на 1-й машине. Есть тому 1-о ЖЕЛЕЗНОЕ доказательство. Когда в батле кто-нибудь создает пользовательскую игру и если у всех зашедших будет фаервол, то если захостивший выйдет во время игры, то у всех будет дисконнект. Так что тут бабка на двое сказала. Iron добавил: Цитата:
Да, не кончается, просто функции хоста перекладываются на другого игрока. Iron добавил: Цитата:
Вот какраз то и происходит смена сервера. Блин, не верите - проверьте. PS: НА ладдерных играх походу сервером выступает сервак близзов. |
||||
17.01.2007, 18:16 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
достаточно было допусть одну оговорку и вот
|
17.01.2007, 18:33 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Iron
Листовой
offline
Опыт:
23,587Активность: |
Вот и добрались до истины. |
17.01.2007, 22:03 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
Неправда, в ладдере тоже сервит один из игроков... |
|
18.01.2007, 12:42 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
логи фаервола дать? |
18.01.2007, 12:43 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
У нас в гостевом инете стоит сервак вара, так вот он не пашет изза того, что клинеты не могут общатся напрямую в обход сервера. Даже в ладдере есть траффик между игроками...
exploder добавил: Точнее сервак-то пашет, игра начинается, но потом сразу же рвется изза десинка... |
18.01.2007, 12:52 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|