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.
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:
It’s all a balancing act – but you’re the one who has to decide how much weight to give each of those factors.