Jump to content

  • Log In with Google      Sign In   
  • Create Account

Delta compression


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 gabrielefarina   Members   -  Reputation: 124

Like
0Likes
Like

Posted 23 April 2013 - 03:52 AM

Hello guys,

 

in my free time I was delving a bit into multiplayer game programming. I made a simple MMO implementation to try out some concepts, and it is working fine for my needs; for the moment I'm relying on delta compressed messages sent at a fixed rate from the server to the clients whenever an object of interested is changed (interest is based on zones where a player is in ATM).

 

My question is very simple: now I'm sending a new delta compressed message (or packet if u prefer) for every object that is changed between the last update and the new one. I was wondering if this was a valid approach or if it would be better to send a delta compressed state of the whole region of interest at every server frame.

I believe that packing all the zone state into a single message will make my server logic much more easy to write and debug, but at the same time I fear that I might incur into too much overhead (consider that now I'm delta compressing the data at the binary level and then I'm deflating it again to pack it tightly).

 

The kind of game I'm working on is a very simple arcade twin stick shooter, with very simple modifiable environment (aka: some static objects can be damaged and then destroyed).

 

Any thought?

 

Thanks



Sponsor:

#2 ApochPiQ   Moderators   -  Reputation: 15683

Like
1Likes
Like

Posted 23 April 2013 - 11:02 AM

The general heuristic is to only send the data you absolutely need to send. If you send a delta of the world state, then by definition you're already sending the minimal set of changes from the previous tick to the current tick, so I don't see how that's going to have any significant extra overhead. If anything it'll be less overhead than processing potentially a large number of individual messages.

#3 gabrielefarina   Members   -  Reputation: 124

Like
0Likes
Like

Posted 23 April 2013 - 04:04 PM

Well what you are saying makes total sense :)

 

I was asking 'cause although I think that sending a delta compressed game state to the client for every tick makes more sense, I noticed that a lot of game servers opt for sending updates for every single game object separately.

Is there a reason for that? Is it for making it easier to deal with stuff such as dynamic creation and deletion of game objects? Or is it simply something that is very related to the kind of game someone is working on?

 

That said I have another question: is there any known drawback on using a binary based delta compression (in my case it is completely "message agnostic" and could work on any kind of binary buffer) instead of an approach where I keep track of what has been changed since the last tick and create a packet out of the changed data only?



#4 hplus0603   Moderators   -  Reputation: 5280

Like
0Likes
Like

Posted 24 April 2013 - 12:08 PM

Every networked game will use a slightly different approach. The specific approach you end up using depends on your particular needs for performance/bandwidth/latency/CPU trade-offs.
It's not actually very important which particular approach you start out with, as long as you set some reasonable goals up front, and make sure you reach them (and keep within them, as you evolve.) If you find you can't reach your goals with the current approach, that's when you start trying another approach.
enum Bool { True, False, FileNotFound };




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS