Client-server Action Synchronisation

I witnessed a desync event yesterday, that makes me question a lot of what GGG says.

Here is what happened:

3 Players in a map (master mission), I am standing still at the exit, friend 1 is standing still close to me, and friend 2 is running back to entrance.

I can see him on the minimap, he runs forward a great distance and then warps back (his marker on the minimap), this happens a total of 3 times.

His experience was him running and the warping back (about 1½ screens) a total of 3 times.

There is no way this can happen because the client is not synced with the server, the server clearly knew where he was, how else would I be able to see him on the minimap (moving forward and warping back).


Still sane exile?
"
Skizo wrote:
I witnessed a desync event yesterday, that makes me question a lot of what GGG says.

Here is what happened:

3 Players in a map (master mission), I am standing still at the exit, friend 1 is standing still close to me, and friend 2 is running back to entrance.

I can see him on the minimap, he runs forward a great distance and then warps back (his marker on the minimap), this happens a total of 3 times.

His experience was him running and the warping back (about 1½ screens) a total of 3 times.

There is no way this can happen because the client is not synced with the server, the server clearly knew where he was, how else would I be able to see him on the minimap (moving forward and warping back).
That is caused by the client(s) and server getting out of sync - albeit with some sort of pathological case that repeats.
He clicked to initiate a move action. This into was passed to the server, which passed it to your client. On his client, and on your client, the movement action was able to move, where on the server something stopped it as soon as (or shortly after) he started moving. The fact it repeats shows there was a specific problem with the terrain and/or entities like chests that was not actually pathable on the server, yet both your clients managed to find a path through on them, before being resynced back because the server noticed he'd gotten too far from his server position.
I've seen that twice before, once with chests and once with a unique terrain piece. I believe both were fixed up. If you can find some terrain which causes this sort of repeated pathing mismatch then a screenshot with /debug info can help us replicate it locally and work out what needs fixing with that bit of terrain.
"
Mark_GGG wrote:
snip

Mark is doing God's work.
The chance to Vaal +1% maximum resists on an amulet is less than 1/300.
"
Mark_GGG wrote:
I've seen that twice before, once with chests and once with a unique terrain piece. I believe both were fixed up. If you can find some terrain which causes this sort of repeated pathing mismatch then a screenshot with /debug info can help us replicate it locally and work out what needs fixing with that bit of terrain.

Unless i'm misunderstanding what's occurring, this problem happens constantly with Leap Slam. On average at least once a race, so basically avg once per hour during regular play. It happens a lot in Prisoner's Gate; when you try to go through doorways at the wrong angle and continue to Leap to the same destination; around corners. You get warped back over and over until you choose a different location.
Necropolis: 95
SC: 95 97 93 96 100 93 94 93 94 95 96 97 94 93 94
HC RIP: 94 96
Character archive: view-thread/963707
Last edited by unsane on Sep 10, 2014, 2:31:45 AM
This is a very tricky problem to solve indeed. It mostly is a choice, GGG decided to go with actions that can miss, and that causes A LOT of these problems unfortunately (it is a lot less noticeable in games like Diablo 3 mostly because nothing misses, so the large majority of de-syncs in that game doesn't even exist).

It is one of those things that doesn't really have a solution, even though you can make it better and better with time. We all want mechanics like dodge, miss, block, accuracy, etc, this is the price to pay for it.

Of course there are companies that probably have this A LOT more studied and advanced at this point, years of experience makes perfect, and GGG is still a new company, so i think with time things will get progressively better and better, we just have to be patient.


Me i never had any De-sync that actually killed a character, and i don't play hardcore, but i understand it can be very complicated in some cases. Let us all be patient and trust in GGG for all they have done until now, and will keep on doing to keep this community happy.

GGG you are a great team, and we can all see it by the amount of people participating and in to your game (just have a look at the sheer amount of threads, views and posts in this forum), that is a monument to your great work, flaws and all :).
Awaklin - Awake, Living and Loving
"
Mark_GGG wrote:
That is caused by the client(s) and server getting out of sync - albeit with some sort of pathological case that repeats.
He clicked to initiate a move action. This into was passed to the server, which passed it to your client. On his client, and on your client, the movement action was able to move, where on the server something stopped it as soon as (or shortly after) he started moving. The fact it repeats shows there was a specific problem with the terrain and/or entities like chests that was not actually pathable on the server, yet both your clients managed to find a path through on them, before being resynced back because the server noticed he'd gotten too far from his server position.
I've seen that twice before, once with chests and once with a unique terrain piece. I believe both were fixed up. If you can find some terrain which causes this sort of repeated pathing mismatch then a screenshot with /debug info can help us replicate it locally and work out what needs fixing with that bit of terrain.


That sort of makes sense, although I am not sure I totally understand the rational behind sending info to my client that is not "verified".

Maybe give the server the ability to verify stuff like this and tell the client if everything works out or not? I am sure that would help a lot with movement skill desync (hello Cyclone).

It might as well, seeing that the game server has absolute authority, so it makes very little sense for the client to do its own thing and then have the server overrule it, when the server figures out that the action produced a different result than on the client.
Still sane exile?
I had this yesterday in the opposite. I was not moving at all, just casting ARC in a
Hunter Quest-Dungeon. Some monsters where charging me and from one moment to another I was on a completly different position between all the monster and got killed.

How an a desync happen if I'm not moving at all ? Or where the monstersout of sync and that pulled me ?

Regards,
Whitch_NrThree (now from Standard)


What drives me sort of nuts about this is that it's EASILY fixed, and it essentially relates to "trust" of your client.

First off, let me begin with my qualifications. I'm a network engineer working for the world's largest CDN. On any given day about 25-39% of all the internet traffic IN THE WORLD passes through our servers. I've had to troubleshoot errors from tiny errors at layer 2 of the OSI model all the way up to layer 7. I've had about 10 years experience in the networking-tech field.

As for my qualifications in POE. I have 3 (primary) characters, A level 80 Chin-Sol puncture ranger, a level 86-flicker crit dagger shadow, and a level 83 Scion, which I'm not currently using due to changes in aura nodes and EK just not having the clear speed of my other builds.

As is obvious, my PRIMARY build would be my shadow. I do the most dps (>100k with flicker and 4 power charges + melee splash, or >190k with added fire damage to a single target), clear the fastest, and generally have the most survivability.

I've died a lot on my shadow. And basically every time it goes something like this: Flicker into a group of level 73-75 mobs, watch their health drop to 20-30%, desync, stop hitting anything, end up stunned, die in the middle of a pack of 60000 mobs that should have died in 1-2 more hits. I know I'm not hitting the mobs when I don't hear the sound connecting on my headphones. When that happens I smash my /oos macro and hope that it reacts before I'm dead.

So, from a network engineering perspective, what's happening here.

1. Packets are being sent to the POE servers. They're being routed here, there, and everywhere by the internet. That's just the way things work. Generally packets make it (about 99.95% of the time) and sometimes they need to be retransmitted. Let's assume that desync is NOT caused by packets dropping, as GGG has commented that it's a sync issue, not a QOS issue.

2. Packets are received by the server a calculation about that packet is performed in a matter of milliseconds, and a response is dispatched

3. The response makes it to your computer, and it verifies that you are somewhere that you can be / that your attack connected / whatever.

So, what's the problem with this?

1. It places NO confidence in the client. Essentially POE is checking every single movement that the client is making, rather than allowing the client to determine whether or not you have taken a hit, the server decides. On a good day, when I'm playing in Boston, MA and my friends are playing in Singapore, I have a ping of about 350-400ms as it's likely me connecting to the SEA servers. That's totally acceptable. What's NOT acceptable is me using flicker strike once and missing with every hit of it, and then teleporting back a half a screen. What happened?

2. My computer sent packets to the GGG servers that service the Pacific Islands and SE Asia, and in the 350-400ms round trip they took, my client chose 3 random targets with flicker. Meanwhile the server chose 3 different targets to attack (flicker + multi). The net decision is: Well, we can't decide what happened, so you didn't use the attack and let's move you back to the last point we agreed. This happens CONSTANTLY. Using movement skills (WB, Flicker, and LS for example) causes me to desync ALMOST immediately.

3. This approach also doesn't factor in outside sources of network congestion, latency, or issues regarding lag spikes (local, or at any of the hops between me and your server). If you do a simple ping-of-death on a website like google and ping it for a period of 24-48 hours every 3-5 seconds, about 98% of your pings should come back within 10-50ms, 1.5% should come back between 50-150ms, and .4% will be well above that at about 150-700ms, and the outliers will probably be about 700ms - 3s. The point I'm getting at is that even with normal connections you can expect STRONG latency spikes in otherwise normal traffic on the internet. It's the nature of the beast.

4. This approach allows for us to "dodge projectiles" and melee attacks that we see coming, but let's face facts and compare this diablo 3. I can dodge spears or fireballs thrown at me just fine... why? Because there's no server-side check to make sure of if I dodged it, and if I didn't let's rewind to the last thing that worked. I'm either standing in fire, or I'm not. It's decided on my client and passed to the server. The server is not telling me if I'm standing in fire. That's why POE cannot fix this. It was a design decision, and it was strongly likely based in anti-cheating. Putting too much information client-side allows the user to cover up what's really happening and allows for a chance to change that information before it reaches the server.

I think that the end of point 4 needs to be reiterated. I would NEVER cheat in POE. The only time I want to cheat is when I die to desync... which wouldn't be caused if the client had more trust placed in it.

There is NO discussion on this. That IS what's happening. You can claim that it's a million other things, but until you realize that the clients need to be trusted, but checked in ways that don't cause user interference, that this game WILL suffer. It will lose you users. It will cost you money. And it will hurt your bottom lines.

This has been an issue for years now, and has sat near the top of your development manifesto for the better part of a year.

The reality is that testing in a 0-latency office is not going to produce desync. Hire someone in Boston to run Wireshark and packet capture EXACTLY what's going on. Find triggers, make bug reports, and stop dodging the issue. This is the BIGGEST problem holding this game back from being the GOTY. And you guys can't / won't throw the resources necessary at it to handle it. Which is saddening.
"
demonskye wrote:
What drives me sort of nuts about this is that it's EASILY fixed, and it essentially relates to "trust" of your client.

First off, let me begin with my qualifications. I'm a network engineer working for the world's largest CDN. On any given day about 25-39% of all the internet traffic IN THE WORLD passes through our servers. I've had to troubleshoot errors from tiny errors at layer 2 of the OSI model all the way up to layer 7. I've had about 10 years experience in the networking-tech field.

As for my qualifications in POE. I have 3 (primary) characters, A level 80 Chin-Sol puncture ranger, a level 86-flicker crit dagger shadow, and a level 83 Scion, which I'm not currently using due to changes in aura nodes and EK just not having the clear speed of my other builds.

As is obvious, my PRIMARY build would be my shadow. I do the most dps (>100k with flicker and 4 power charges + melee splash, or >190k with added fire damage to a single target), clear the fastest, and generally have the most survivability.

I've died a lot on my shadow. And basically every time it goes something like this: Flicker into a group of level 73-75 mobs, watch their health drop to 20-30%, desync, stop hitting anything, end up stunned, die in the middle of a pack of 60000 mobs that should have died in 1-2 more hits. I know I'm not hitting the mobs when I don't hear the sound connecting on my headphones. When that happens I smash my /oos macro and hope that it reacts before I'm dead.

So, from a network engineering perspective, what's happening here.

1. Packets are being sent to the POE servers. They're being routed here, there, and everywhere by the internet. That's just the way things work. Generally packets make it (about 99.95% of the time) and sometimes they need to be retransmitted. Let's assume that desync is NOT caused by packets dropping, as GGG has commented that it's a sync issue, not a QOS issue.

2. Packets are received by the server a calculation about that packet is performed in a matter of milliseconds, and a response is dispatched

3. The response makes it to your computer, and it verifies that you are somewhere that you can be / that your attack connected / whatever.

So, what's the problem with this?

1. It places NO confidence in the client. Essentially POE is checking every single movement that the client is making, rather than allowing the client to determine whether or not you have taken a hit, the server decides. On a good day, when I'm playing in Boston, MA and my friends are playing in Singapore, I have a ping of about 350-400ms as it's likely me connecting to the SEA servers. That's totally acceptable. What's NOT acceptable is me using flicker strike once and missing with every hit of it, and then teleporting back a half a screen. What happened?

2. My computer sent packets to the GGG servers that service the Pacific Islands and SE Asia, and in the 350-400ms round trip they took, my client chose 3 random targets with flicker. Meanwhile the server chose 3 different targets to attack (flicker + multi). The net decision is: Well, we can't decide what happened, so you didn't use the attack and let's move you back to the last point we agreed. This happens CONSTANTLY. Using movement skills (WB, Flicker, and LS for example) causes me to desync ALMOST immediately.

3. This approach also doesn't factor in outside sources of network congestion, latency, or issues regarding lag spikes (local, or at any of the hops between me and your server). If you do a simple ping-of-death on a website like google and ping it for a period of 24-48 hours every 3-5 seconds, about 98% of your pings should come back within 10-50ms, 1.5% should come back between 50-150ms, and .4% will be well above that at about 150-700ms, and the outliers will probably be about 700ms - 3s. The point I'm getting at is that even with normal connections you can expect STRONG latency spikes in otherwise normal traffic on the internet. It's the nature of the beast.

4. This approach allows for us to "dodge projectiles" and melee attacks that we see coming, but let's face facts and compare this diablo 3. I can dodge spears or fireballs thrown at me just fine... why? Because there's no server-side check to make sure of if I dodged it, and if I didn't let's rewind to the last thing that worked. I'm either standing in fire, or I'm not. It's decided on my client and passed to the server. The server is not telling me if I'm standing in fire. That's why POE cannot fix this. It was a design decision, and it was strongly likely based in anti-cheating. Putting too much information client-side allows the user to cover up what's really happening and allows for a chance to change that information before it reaches the server.

I think that the end of point 4 needs to be reiterated. I would NEVER cheat in POE. The only time I want to cheat is when I die to desync... which wouldn't be caused if the client had more trust placed in it.

There is NO discussion on this. That IS what's happening. You can claim that it's a million other things, but until you realize that the clients need to be trusted, but checked in ways that don't cause user interference, that this game WILL suffer. It will lose you users. It will cost you money. And it will hurt your bottom lines.

This has been an issue for years now, and has sat near the top of your development manifesto for the better part of a year.

The reality is that testing in a 0-latency office is not going to produce desync. Hire someone in Boston to run Wireshark and packet capture EXACTLY what's going on. Find triggers, make bug reports, and stop dodging the issue. This is the BIGGEST problem holding this game back from being the GOTY. And you guys can't / won't throw the resources necessary at it to handle it. Which is saddening.



AMEN
Blizzard use Warden which is another application to detect client side cheating. I wonder why GGG hasn't gone this route. Giving more control to client but monitored control. Not that D3 is perfect in the desync dept. Rubberbanding with a 73MS WW barb was infamous prolly why they nerfed build and MS, attack speed, teleport worm-holing and other speedy things and game feels like you have shackles on. Anyway I'm sure GGG is doing all they can within parameters they set just wondering if this "warden" approach was ever looked at and results.
Git R Dun!
Last edited by Aim_Deep on Sep 12, 2014, 5:15:13 AM

Report Forum Post

Report Account:

Report Type

Additional Info