Client-server Action Synchronisation

"
GGprime wrote:
Since 1.3 dominus completley out of sync. I have never seen him "teleport" around like he does lately, and I´m not talking about his usual teleport skill. Anyone else noticed that?


To be honest Dominus fights are always binary for me. I can either drop him very quickly or have to zerg him as he jumps around like crazy. This has been the case since he first appeared, not just after 1.3. Dominus also seems to be one of the worst bosses in terms of resync code, as you can watch him doing this ghost attack for 2-3 seconds while he is really someplace else.
"
Emjayen wrote:
The fundamental problem with the dumb-client model (which PoE employs) is that it doesn't perform well when there are highly populated and highly dense regions of objects that have interdependencies (e.g, mobile monsters) due to the low determinism over short time scales which hurts client-side extrapolation, and the sheer quantity of delta state information that must be propagated to clients.

A simultaneous simulation approach adapted to PoE, I argue would be much better for a few reasons:

* Deterministic game state means propagating no more than the bare minimum amount of information -- user input.

* Arbitrarily complex game objects without needing to figure out how to encode their state on the wire.

* Much easier debugging; simply dump the input streams and replay to reproduce.

* Obviously, byte-perfect synchronization between all clients (in virtual time, at least)

As for the issue of responsiveness; there are a few solutions, one would be to maintain a parallel copy of the simulation client-side which would enable the usage of the usual extrapolation techniques while being aligned time-to-time with the authoritative state.

Fundamentally the worst case scenario in terms of delay is the client's RTT, which is the baseline anyway.

There are some security issues (inheriting for the fact it's a perfect-information game) however nothing major since the server is still the authority on the game state.

I'm really tired.
The client can never predict or account for other human players, so there will always be some desync when playing with other human players even with your model. The problem worsens as more and more human players are involved.

Of course this is a problem that affects all network models and your proposel is still heaps better than the current implementation, especially for solo play.

"
twiz wrote:
Legitimate question that I would like an answer for...
Why do I constantly get more and more out of sync the longer I -DON'T- spam "/oos"?

Chris says in the original post that rubberbanding is "good", which it really isn't however, rubberbanding would be 100x better than what happens on my end. I don't rubberband unless I spam "/oos", so it feels like my desync compounds more and more when I don't hit the button or change areas.
Last night while playing, I killed a few packs of monsters in Act 3 Warehouse sewers, grabbed my loot and clicked NEAR a doorway. I instantly took a big chunk of my health, then died a second later. Apparently when I clicked NEAR the door, due to my accumulated(?) desyc, it walked me INTO/THROUGH the door, and into view of a pack of monsters.


From the sounds of it you thought you were at position X when you decided to click on the door but you were actually at position Y according to the server. When you clicked the door you walked from position X to the door according to the client but according to the server you walked to it starting from position Y, the journey from position Y just so happened to intersect with enemies.

You are right that rubber banding is 100x better than not rubber banding, especially if it happens often enough that you only shift minor distances (less than a Inch) on your 23" 1920x1080 screen whenever you're resynced.
Computer specifications:
Windows 10 Pro x64 | AMD Ryzen 5800X3D | ASUS Crosshair VIII Hero (WiFi) Motherboard | 16GB 3600MHz RAM | MSI Geforce 1070Ti Gamer | Corsair AX 760watt PSU | Samsung 860 Pro 512GB SSD & WD Black FZEX HDD
Last edited by Nicholas_Steel on Dec 27, 2014, 10:50:50 AM
Lost another character due to complete BS.
Not to say I'm the only one, but that fact only bolsters my and others arguments about this needing to be fixed.

I opened a blue chest last night (ID'd it, nothing that stood out too much, no extra monsters, no curse/status, no increased level, etc). Got the sound effects as usual, but nothing happened so I quickly hit my /OOS button. Everything pops, but NOTHING MOVES, nothing takes damage. I can't do anything because I'm out of sync (again) and the command is on cooldown.


Working as intended, right guys?
Last edited by twiz on Dec 27, 2014, 2:11:03 PM
"
SirCast wrote:
So I read the thread...

It does NOT explain to me why other games run smoothest and POE constantly sux when it comes to the desync topic (and frankly I don't care if I use that right - everybody knows what I mean, it's the same EVERYBODY means.).
If you want me to play and enjoy the game in order to spend some more money on it - EFFING FIX IT.
Get better developers, beg users for money if that fixes the problem, we surely are willing to support this great game, but the desync is so bad, it's unplayable.

.) I keep shooting at monsters that aren't there - tadaaa! out of mana, feeling stupid much - great!
.) Monsters suddenly kill me who weren't there so I could not outrun OR shoot them - feeling stupid much, great!
.) Monsters run around the corner but in fact the haven't, they are still on the other side... This happens over and over and over and over and over and over and over and over again. And YOU ARE TRYING to tell me, that's because of the server feedback? I am not moving at ALL I am just standing there and shoot and wait til that effing thing ACTUALLY comes around, not his desync GHOST!
.) I move - ZAP! pulled back a sec latter right in the middle of a fiery death pit, great!
.) Strongboxes are a f**king nightmare because of this. No sense in bringing such updates to the game if I have to avoid them because the chance of desync caused death is to damn high!

This is ridiculous!

I can't trust what i am seeing on the screen with a 100mbit cable connection and a ping of 40ms?!?!?!?
You would have my sympathy if no other game got that issue right, but THEY DID!
You hear me? No, there are no such experiences with the client based games in battle.net. Don't bullshit your customers.


Well guys, here's the thing:
1) You are able to fix this.
But I guess, you are not...'cause you would have done it already, wouldn't you.
2) Player DON'T lose XP when dying anymore, because fuck leveling or Hardcore for that matter if I can't shoot or avoid the things that kill me! If I wanna play a game like that I role a dice, 'cause it sure ain't has nothing to do with my build or skill...
3) Next season of D3 is coming soon - change anything, or I am gone.

I just wanna enjoy a decent game, I don't wanna become an expert of in lags, desync and coding. I don't care, it's not my job - it's yours.
The fact that I made the effort to google all this, read all this, shows how much I care and what a f***king tragedy this is - that a great game gets pulled down by bad coding which really ruins the gameing experience totally!

Thx and bye


+1 !
I originally posted this in general but i guess no one has an answer or what knot so maybe this is a more appropriate place for it concerning certain skills and some things ive noticed from testing different gems and skills to get better acquainted with the game!

so ive testing out alot of different skills and such to start making builds and i started running a Scion and since i run Spectral Throw ive also been running Whirling Blades with it and it works nice
....except now i have more Desync than any other setup i have ever run! i can throw my ST and use WB to create distance to get a little more out of the ST and for kiting! but once i do this a couple times say 3 or 4 then all of a sudden ill get jerked back all the way to the first WB i used!
not sure what would be causing such an issue since i haven't seem to have Desync issues as much with other skills like i have with Whirling Blades!

i even swapped to Leap Slam and it doesn't seem to desync near as bad (although it does do the same with that skill too just nowhere near as often) but that isnt quite as effective as the WB+ST combo so im not sure if its a bug or just the skill itself is more prone to desync than other skills... im also about to start testing out Cyclone and Flicker Stick both of which ive already been warned that ill most likely run into the same issue if not possibly worse!

is there something that can be done to fix such an issue that seems to be connected to certain skill gems themselves? is there something i can do about it on my end? i had to do some things on my PC anyway to get the game running smoothly and ive been able to do that so if theres something i can do to help on my end just show me the way!! wasnt sure if this is a bug or something that is common with these certain skills and its something they are working on either!

Judgeing from what i keep hearing its classic desync but why would it effect certain skills more than others?

Thanks! \m/

There is a fine line between Consideration and Hesitation.
The former is Wisdom, the latter is Fear.
Last edited by Demonoz on Dec 29, 2014, 4:52:18 PM
"
Demonoz wrote:
Judgeing from what i keep hearing its classic desync but why would it effect certain skills more than others?


Giving a complete answer to this question would mean giving you a huge wall of text, so please consider the following as broad overview. In particular, I'll assume that you WB and LS towards a location, not a moving monster.

First of, desync is born out of latency. You perform an action on the client, it arrives at the server a few milliseconds later.

So you WB towards a location, passing through some monsters. One of the mobs mini-stuns you on the way. The client receives the message 'You've been stunned' 50ms after it was generated on the server. Due to this time offset, the client may have trouble determining exactly where the stun occurred, at makes a best guess. This guess slightly differs from the server position, but not enough to cause a complete resync.

You then proceed to attack the next mob. Using leap slam, your character quite literally flies from your current position to the target position. Say the client assumes that the target is within range, he immediately renders the jump. The server has a slightly different position, so one of two things may happen. Either the server determines that the target is within range. He executes the jump, and all is well (this actually might correct the position difference). The server might also determine that the target is out of range, and have your character move a few steps before jumping, assuming that the client will do the same. This may worsen desync.

So why is WB worse than leap slam in this regard? Mainly because leap slam has you jumping, whereas WB travels across the ground. Now there's a new element in play, ground obstacles. In POE, your character can quite literally be blocked by a twig. From your client position, you may assume that the path of WB is clear, while on the server you're partially blocked by an obstacle. This may lead to a huge position difference, and unfortunately the game does not recognize it correctly, and hence does not resync as required.

The entire thing gets much, much worse if you include the fact and more often than not, you'll be WBing towards a mob rather than a location. This mob is moving, and brings his own amount of desync in the equation (this is one reason why multistrike cyclone was such fun).

Now, is it impossible to prevent all this from happening? Partially. You cannot prevent the first amount of desync from happening, with latency this will always happen. But, as you correctly observed, you can often play the game for multiple seconds with a huge positional offset without the game noticing, causing you to execute multiple WBs on the client that are then corrected quite brutally. This is where POE, with all due respect, has dropped the ball. The mechanisms for desync detection do not work nearly as well as they should, causing players to entirely ignore certain skills.
Very interesting to say the least... typically when im using WB im throwing out my Spectral Throw then WB away from enemies to maximize the damage from ST! but it makes sense i just dont understand why in a game like D3 when this happens the client will just stop for a second and then jump back into position after a moment while this game basically keeps on going then will just jump back out of no where without any warning unless you are paying attention to things like enemies taking (or not taking) damage and such! its interesting how the 2 games differ so much with the same type of synchronization going on!
Not sure what could be done to fix such an issue other than putting more trust into the client which seeing as how this game already has issue as far as cheating goes cant happen either!
Sounds like IF they ever do fix such an issue they would potentially be an innovator in such technology in doing so! as i said before i dont seen to have as many issues with desync as others claim to have on these forums but im also about 16 hours away (Driving time) away from the US server! i wonder if players who say live in TX have even less issues with this? and if so maybe setting up 2 more servers one east coast and one west coast would be a perminate solution to this issue? but then again if they do that they would also have to do the same in other regions they serve and im quite sure we are talking some serious cash in doing so! probably not worth the investment for only one game but IF GGG were to have plans in the future to make more games OR extend this game to 10 acts like Chris Wilson says they plan to do it may be an option worth looking into! or maybe getting service from existing servers from other companies maybe something like that!
There is a fine line between Consideration and Hesitation.
The former is Wisdom, the latter is Fear.
Last edited by Demonoz on Jan 5, 2015, 11:04:41 AM
"
Demonoz wrote:
Very interesting to say the least... typically when im using WB im throwing out my Spectral Throw then WB away from enemies to maximize the damage from ST! but it makes sense i just dont understand why in a game like D3 when this happens the client will just stop for a second and then jump back into position after a moment while this game basically keeps on going then will just jump back out of no where without any warning unless you are paying attention to things like enemies taking (or not taking) damage and such! its interesting how the 2 games differ so much with the same type of synchronization going on!


Again, this is an incomplete answer, but one reason is that for D3 the entire system is much easier - for instance, in D3 a projectile that is fired at you will hit you, even if you move out of the way. This is not the case with PoE. The challenge desync poses for developers is that you rarely have the one big cause (as the one I've outlined above). It is the number of small, hard to detect desyncs (entropy) that, at some point, very suddenly becomes catastrophic. The more complex your system is, the worse the risk for desync.

Adding to this, D3 does seem to have a better resync mechanic. Bigger budget, more developers. When people (including myself) ask for GGG to fix desync, what we're essentially saying is 'mitigate against the effects'. D3 is a lot quicker in identifying when desync happens, thus quicker in resyncing, thus causing more rubberbanding. This is nontrivial stuff.

"
Demonoz wrote:
Not sure what could be done to fix such an issue other than putting more trust into the client which seeing as how this game already has issue as far as cheating goes cant happen either!


There is a number of techniques you can implement. I personally find it unfortunate that the devs are not sharing their insights with the community, so we're largely left speculating about the inner workings of the engine. However, some flaws with the current system are obvious, so without going into technical details I for one am sure that you can do better than what we have now.

"
Demonoz wrote:
if so maybe setting up 2 more servers one east coast and one west coast would be a perminate solution to this issue? but then again if they do that they would also have to do the same in other regions they serve and im quite sure we are talking some serious cash in doing so! probably not worth the investment for only one game but IF GGG were to have plans in the future to make more games OR extend this game to 10 acts like Chris Wilson says they plan to do it may be an option worth looking into! or maybe getting service from existing servers from other companies maybe something like that!


More servers will only help a little. Unless your ping time goes above ~150ms (or changes rapidly), you can actually mostly correct for the desync happening, and most servers will give you considerably less than that. The bigger issues are not caused by real latency in a technical sense, but by lag spikes or package loss. Just to give a broad idea of the latter, there are essentially two ways of communicating. One is by strictly sequential streaming: Client sends package 1, server acknowledges 1, client sends package 2 etc. In practice, this approach is too slow for action games. The other approach is more fire and forget. Client sends packages 1,2,3, which may reach the server in the order 3,1,2 because they took different routes. Maybe the server only gets 3,1, because package 2 was lost (this happens quite frequently). Even if you detect this immediately (which you cannot) this is a huge problem in terms of keeping server and client synchronized.
"
vezuial wrote:
More servers will only help a little. Unless your ping time goes above ~150ms (or changes rapidly), you can actually mostly correct for the desync happening, and most servers will give you considerably less than that. The bigger issues are not caused by real latency in a technical sense, but by lag spikes or package loss. Just to give a broad idea of the latter, there are essentially two ways of communicating. One is by strictly sequential streaming: Client sends package 1, server acknowledges 1, client sends package 2 etc. In practice, this approach is too slow for action games. The other approach is more fire and forget. Client sends packages 1,2,3, which may reach the server in the order 3,1,2 because they took different routes. Maybe the server only gets 3,1, because package 2 was lost (this happens quite frequently). Even if you detect this immediately (which you cannot) this is a huge problem in terms of keeping server and client synchronized.

Indeed fluctuating connectivity performance is the biggest issue, not high latency. Having a low latency like 30~ms that fluctuates between 30 and 50ms often, will incur desync much more often then a person who has a connection that fluctuates between 30 and 40ms or rarely if ever fluctuates. A person with 200~ms that fluctuates between 190 and 230ms is more likely to see desyncs then a person with a reasonably consistent 250~ms connection.
Computer specifications:
Windows 10 Pro x64 | AMD Ryzen 5800X3D | ASUS Crosshair VIII Hero (WiFi) Motherboard | 16GB 3600MHz RAM | MSI Geforce 1070Ti Gamer | Corsair AX 760watt PSU | Samsung 860 Pro 512GB SSD & WD Black FZEX HDD
Last edited by Nicholas_Steel on Jan 8, 2015, 9:58:41 PM
Very interesting stuff vezuial thanks for the info!! i certainly have a netter understanding now of why this issue is here and why it such a challenge to fix!! guess its not quite as simple as people think!
All we can do i guess is wait.. im sure they will figure something out with time! Desync can be a pain in the ass but its not so bad the game is completely unplayable so i guess its just something we have to live with for the time being!
There is a fine line between Consideration and Hesitation.
The former is Wisdom, the latter is Fear.

Report Forum Post

Report Account:

Report Type

Additional Info