Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should I use XML or Binary to send data from server to client?

Tags:

c++

c#

xml

I have two separate apps - one a client (in C#), one a server (in C++). They need to exchange data in the form of "structs" and ~ about 1 MB of data a minute is sent from server to client.

Whats better to use - XML or my own Binary format?

With XML:

  • Translating XML to a struct using a parser would be slow I believe? ("good",but: load parser, load XML, parse)
  • The other option is parsing XML with regex (bad!)

With Binary:

  • compact data sizes
  • no need for meta information like tags;
  • but structs cannot be changed easily to accomodate new structs/new members in structs in future;
  • no conversion from text (XML) to binary (struct) necessary so is faster to receive and "assemble" into a struct)

Any pointers? Should I not be considering binary at all?? A bit confused about what approach to take.

like image 655
Liao Avatar asked Feb 02 '10 09:02

Liao


2 Answers

1MB of data per minute is pretty tiny if you've got a reasonable network connection.

There are other choices between binary and XML - other human-readable text serialization formats, such as JSON.

When it comes to binary, you don't have to have versioning problems - technologies like Protocol Buffers (I'm biased: I work for Google and I've ported PB to C#) are explicitly designed with backward and forward compatibility in mind. There are other binary formats to consider as well, such as Thrift.

If you're worried about performance though, you should really measure it. I'm pretty sure my phone could parse 1MB of XML sufficiently quickly for it not to be a problem in this case... basically work out what you're most concerned about, in terms of:

  • Simplicity of code
  • Interoperability
  • Performance in terms of CPU
  • Network traffic
  • Backward/forward compatibility
  • Human readability of on-the-wire format

It's all a balancing act - but you're the one who has to decide how much weight to give each of those factors.

like image 72
Jon Skeet Avatar answered Nov 14 '22 23:11

Jon Skeet


If you have .NET applications in both ends, use Windows Communication Foundation. This will allow you to defer the decision until deployment time, as it supports both binary and XML serialization.

like image 34
Mark Seemann Avatar answered Nov 14 '22 23:11

Mark Seemann