What is Desync? (A thorough explanation)

"
deteego wrote:
The mitigation (which was mentioned by the OP) is syncing the server and client at every X interval. It was also mentioned in that post that this method is ridiculously expensive (and I agree), since every single client in the world playing PoE would have to sync with the PoE servers

If they use the current model (that is, there are 2 states, the client state and the server state, and both synchronize every now and then), then the only way to mitigate this problem is to sync more often, which is incredibly expensive (in the computing context of the term)

Its not me going 'waaaa it can't be fixed', the various posts by the moderators already confirmed that this problem is here to stay unless GGG rewrite the entire fundamental netcode of PoE so it uses a different sync system.


Is it not also possible to rewrite the code to transmit the data more efficiently/compressed/etc. so as to be able to sync more often without significantly increasing bandwidth requirements?

"
deteego wrote:
GGG claiming that every game has desync problems is what is obtuse, its obtuse because the server(state)-client model actually removes the possibility of desyncs. Its not possible to desync if the game state is just on the server, because there is no state on the client, the only form of desync would be a disconnect (which means you are not connected to the server)

Almost every real time game focused on multiplayer (and in non realtime games its pretty much irrelevant) has used the server state -> client model, regardless of how sensitive the game is in realtime. If the game happens to be non persistant (like FPS's), then using the state on client -> server model is also applicable (its basically the reverse). The reason why this is happening is state is being maintained on both server and client (it has to, state needs to be on the server because the server has to keep track of your exp and items and whatnot)

Im saying that GGG can't fix this problem from a realistic perspective, because GGG having to change the entire netcode, as mentioned previously is most likely out of the question


I'm not a coder, but I'm unaware of any game that has the "entire" state on the server side. Client/server games of any type require the server send their state to the client, which takes time. The client then reacts and the reaction is sent to the server, again taking time. This leads to a potential for desync to *some* degree, only mitigated by how much/little has to be synced and how efficiently it is synched. Thus, the mitigation previously mentioned.
Please familiarize yourself with the Greater Internet Fuckwad Theory (GIFT) - http://www.penny-arcade.com/comic/2004/03/19

Realize that the only part of the equation you can affect in the GIFT is the audience. Remove the audience and the trolls merely rant at the air.
"
CrystalisQualinthi wrote:

Is it not also possible to rewrite the code to transmit the data more efficiently/compressed/etc. so as to be able to sync more often without significantly increasing bandwidth requirements?


This has nothing to do with how efficiently the server and client communicate with eachother, if it was it would have been solved long ago (and not persisting ever since the game was in alpha). Desyncs happening are completely outside of GGG's control, its a fact of networking. The problem happens because the server and client disagree with what the game state is (and this happens because there is the state for the same elements on both the client and sever). Making code more efficient is not fixing this.

The only thing that compression/reducing amount of data transmitted (which I am pretty sure PoE has done as much as they can in this area) is reduce the delay/latency and stress on their servers, which is completely unrelated.

This issue is there because GGG fundamentally designed PoE to have 2 states for everything (movement, spells, health etc etc), one on the server, one on the client, and PoE was pretty much designed with this in mind. It is a networked multiplayer game after all, the netcode isn't just bolted on

"
CrystalisQualinthi wrote:

"
deteego wrote:
GGG claiming that every game has desync problems is what is obtuse, its obtuse because the server(state)-client model actually removes the possibility of desyncs. Its not possible to desync if the game state is just on the server, because there is no state on the client, the only form of desync would be a disconnect (which means you are not connected to the server)

Almost every real time game focused on multiplayer (and in non realtime games its pretty much irrelevant) has used the server state -> client model, regardless of how sensitive the game is in realtime. If the game happens to be non persistant (like FPS's), then using the state on client -> server model is also applicable (its basically the reverse). The reason why this is happening is state is being maintained on both server and client (it has to, state needs to be on the server because the server has to keep track of your exp and items and whatnot)

Im saying that GGG can't fix this problem from a realistic perspective, because GGG having to change the entire netcode, as mentioned previously is most likely out of the question


I'm not a coder, but I'm unaware of any game that has the "entire" state on the server side. Client/server games of any type require the server send their state to the client, which takes time. The client then reacts and the reaction is sent to the server, again taking time. This leads to a potential for desync to *some* degree, only mitigated by how much/little has to be synced and how efficiently it is synched. Thus, the mitigation previously mentioned.


Almost entire state, yes. At best, movement may be client side (I think this is how it works with WoW), but basically everything else is done on the server. All logic for the game (casting spells, hitting someone with a fireball which reduces their health, etc etc) is all done server side. The client is just basically a graphical frontend to the server, thats specific for your character

EDIT: actually for WoW, the movement is client side (which is actually the same reason why speed hacks exist in WoW, anything that is client side can be hacked). However everything else (casting spells, taking damage, taking mana etc etc) is all server side. iirc WoW is also completely TCP based
Last edited by deteego#6606 on Feb 21, 2013, 4:04:35 AM
"
deteego wrote:
"
CrystalisQualinthi wrote:

Is it not also possible to rewrite the code to transmit the data more efficiently/compressed/etc. so as to be able to sync more often without significantly increasing bandwidth requirements?


This has nothing to do with how efficiently the server and client communicate with eachother, if it was it would have been solved long ago (and not persisting ever since the game was in alpha). Desyncs happening are completely outside of GGG's control, its a fact of networking. The problem happens because the server and client disagree with what the game state is (and this happens because there is the state for the same elements on both the client and sever). Making code more efficient is not fixing this.

The only thing that compression/reducing amount of data transmitted (which I am pretty sure PoE has done as much as they can in this area) is reduce the delay/latency and stress on their servers, which is completely unrelated.

This issue is there because GGG fundamentally designed PoE to have 2 states for everything (movement, spells, health etc etc), one on the server, one on the client, and PoE was pretty much designed with this in mind. It is a networked multiplayer game after all, the netcode isn't just bolted on


So you don't see how more efficient communication between client and server could lead to more frequent communication? Which, in turn, reduces the amount of desync possibilities as the client and server are talking more frequently and updating each other more frequently?

Think about it, if they limit current communication to once every 10 seconds (completely bullshit number pulled from the air to make for easy math) due to bandwidth limitations and they find a way to halve the bandwidth used when syncing, they could then theoretically make the synch happen every 5 seconds with zero net change in total data transmitted/bandwidth used.

I think that barring a complete rewrite, efficiency and server scaling (to better handle the load of more frequent syncs) is the key. I know from a personal perspective that my desynch issues have improved after every patch and I very rarely notice the problem any more. In my mind, that makes it appear something is actively being done about the issue.
Please familiarize yourself with the Greater Internet Fuckwad Theory (GIFT) - http://www.penny-arcade.com/comic/2004/03/19

Realize that the only part of the equation you can affect in the GIFT is the audience. Remove the audience and the trolls merely rant at the air.


All I know is when im getting "desync'd" I get crazy ping like 600-2000. Thats how bad it is.

This started just before ob when ggg started load testing the servers. Its been like this since.

To me this has everything to do with server not able to handle heavy load, rather than this hit/miss tactical positioning spin, nice try tho.
"
CrystalisQualinthi wrote:

So you don't see how more efficient communication between client and server could lead to more frequent communication? Which, in turn, reduces the amount of desync possibilities as the client and server are talking more frequently and updating each other more frequently?


I just explained why you are wrong

Look you just said you are not a programmer, so don't punt on things you dont understand
"
deteego wrote:
"
CrystalisQualinthi wrote:

So you don't see how more efficient communication between client and server could lead to more frequent communication? Which, in turn, reduces the amount of desync possibilities as the client and server are talking more frequently and updating each other more frequently?


I just explained why you are wrong

Look you just said you are not a programmer, so don't punt on things you dont understand


You offered what appears to me to be an incomplete analysis of the situation. I'm not a programmer, but I *am* an IT professional and I understand bandwidth and things of that nature. Thus, if desync is caused by the client/server having their own version of the game that get out of sync with each other due to lack of communication between the two units, why would bandwidth optimization followed by faster sync between the client and server devices NOT alleviate the problem?

Desyc happens when the client and server each think different things have happened because they haven't synced (talked to each other via data transfer) often enough. Increase the frequency with they talk to each other and you reduce the chances they think different things are happening, simple enough. Now, if all you do is increase the frequency they talk without reducing data size, you're increasing load on the server, and the servers are already stressed, so GGG cannot just make them talk more often to resolve the issue without damaging server stability as a result. Thus if you decrease data size transmitted during their chatter, you allow for the server to handle more frequent communication with less stress.

I think your problem is in thinking "client and server have their own state and can never agree!" when in fact the reality is that while they each have their own state, they reconcile their differences every time they sync. When the differences are reconciled, the server 'wins' any arguments, causing the client to see screwy things when mob positions are changed, etc.

I offer that I am not a programmer in that I mean I could not do anything useful with the netcode were it in front of me, nor do I know specifically what you can do to optimize network traffic during sync. I just know that less traffic being sent allows for more sending with the same load levels.
Please familiarize yourself with the Greater Internet Fuckwad Theory (GIFT) - http://www.penny-arcade.com/comic/2004/03/19

Realize that the only part of the equation you can affect in the GIFT is the audience. Remove the audience and the trolls merely rant at the air.
thanks for the explanation :)
ITT: The salty tears of spoiled children.
I play from SA and I'm quite well acquainted with all forms of lag/desync/disconnects.

Doesn't even bother me lol.

Good explanation OP. +2 internets

To the OP - Very nice post, explained it well and I feel like I've learnt a more in-depth knowledge of de-syncing from it.
adania/93 --- ElementalNecro/91 --- GwanSauceMan/90
ScionFakeWitch/88 --- WikiWikiWitch/87 --- LArrowToTheKnee/83
Lethal_Injection/80
[b color="#FE2EC8"][b color="#FFAC12"][/b]
very usefull thread explaining why most things should happen clientside and not serverside like they do now...thank you

Report Forum Post

Report Account:

Report Type

Additional Info