Googles appar
Huvudmeny

Post a Comment On: cbloom rants

"05-20-13 - Thoughts on Data Compression for MMOs"

14 Comments -

1 – 14 of 14
Blogger Cyan said...

> model precondition has bad channel startup time

Are you sure ?
It seems possible to pre-build an LZ-dictionary, and then just copy/paste it for each different stream.

May 22, 2013 at 11:58 AM

Comment deleted

This comment has been removed by the author.

May 22, 2013 at 11:58 AM

Blogger Unknown said...

With UDP you could modify compressor context when receiving confirmations of packet reception by the client. Outgoing packets would also need to include info on what confirmations were received by the server at the time that packet was compressed, so that decompressor is in sync.

Am I missing something that would stop this from working?

May 22, 2013 at 4:31 PM

Blogger cbloom said...

"It seems possible to pre-build an LZ-dictionary, and then just copy/paste it for each different stream."

Well, you're not just pasting the LZ dictionary, you have to also paste the whole match acceleration structure, which is usually several X larger.

But yeah, if the precondition is small, then the time is not bad. But then you're losing the advantage of the semi-static case that the shared (static) part of the model could be much larger than the adaptive part per-channel.

May 22, 2013 at 5:36 PM

Blogger cbloom said...

"With UDP you could modify compressor context when receiving confirmations of packet reception by the client. Outgoing packets would also need to include info on what confirmations were received by the server at the time that packet was compressed, so that decompressor is in sync.

Am I missing something that would stop this from working?"

It seems like a huge mess. The confirmation messages would have to contain the order of receipt (that the client saw) of the server messages. The confirmation messages themselves could go back out of order. Every message from server->client would have to indicate what state was used for the encoding of that packet.

I'm sure something is possible but I can't imagine it's worth it.

Plus UDP is pretty out of fashion these days.

May 22, 2013 at 5:40 PM

Blogger Fabian Giesen said...

"Plus UDP is pretty out of fashion these days."
What gave you that impression?

Game packets are usually UDP, at least for 3D games. TCP retransmits and resulting latency spikes are completely unacceptable for any game where players can see other player's characters.

May 22, 2013 at 5:43 PM

Blogger cbloom said...

I've been seeing a lot of threads around the net about games switching from UDP to TCP. It used to be always UDP back in my day of course. (and we walked uphill both ways, programmed with vacuum tubes, etc)

The reason I gather is : too many headaches with UDP through NAT and firewalls and such, and TCP latency has come way down.

I could certainly be wrong, I'm taking the pulse of the game industry with a hundred foot long pole.

May 22, 2013 at 5:49 PM

Blogger Unknown said...

I agree doing that with UDP is a hairy problem and probably not worth it, just thought it was possible.

May 22, 2013 at 5:50 PM

Blogger cbloom said...

@cbloom - yeah, I think you're just wrong about that. Twitch shooter type games are all UDP still.

May 22, 2013 at 6:12 PM

Anonymous Anonymous said...

Probably it's basically PvP requires UDP, PvE can live with TCP.

But arguably it's partly because TCP people aren't passionate about the craft and don't give a shit about turning people popping around due to 100ms latencies to people popping around even worse due to 400ms latencies.

May 22, 2013 at 6:48 PM

Blogger Unknown said...

I worked on an MMO with heavy focus on PvP that used TCP exclusively. In practice there are so many things that can introduce delayed positional messages in an MMO that I dont think using UDP to avoid TCP retransmissions is worth it. Your time is better spent creating a robust positional extrapolation/interpolation system. This will cover up message delays independent of the cause of the delay. UDP is ideally better but guaranteed delivery and order of delivery is awfully convenient.

We did a simple delta compression on positional data and a fast LZ77 on all data sent to clients. It practice bandwidth wasnt an issue for us so we didnt do any more work on this.

I think its better to not compress/pack data on a per player basis, but instead divide the game world in tiles/cubes and compress all character/player positions in each tile in one go. Then all the compressed tile packets that intersect with a player area of interest would be sent to the player without further compression. The worst case of all players in the same place seeing everyone else can actually be handled in this way.

May 23, 2013 at 6:25 AM

Blogger SkipIntro said...

. We were atand managed to get it down tosimple binary range encoder and an adaptive order, but we will have to go all the way down to's acceptable. Haven't really tried most of the options you mention, but I doubt they would work well for ~.

May 23, 2013 at 6:27 AM

Blogger cbloom said...

@nothings - I suspect in cases like WoW it's not a question of lack of passion or technical skill. I imagine they had a pro/con something like :

1. UDP is better, but 1% of users will have problems that make them return the game vs.

2. TCP is worse but doesn't make people return the game.

May 23, 2013 at 11:40 AM

Anonymous Anonymous said...

Could be.

But that still reflects a triumph of commerce over passion.

May 23, 2013 at 1:14 PM

You can use some HTML tags, such as <b>, <i>, <a>

This blog does not allow anonymous comments.

Comment moderation has been enabled. All comments must be approved by the blog author.

You will be asked to sign in after submitting your comment.