I’m about to design a client application and the server part is not designed either.
I need to decide on the communication protocol.
The requirements are:
- fast, compact
- supports binary file transfer both ways
- server is probably PHP, client .NET
So far I have considered these:
- custom XML over HTTP – I’ve done this in the past, but it’s not very suitable for file transfer, otherwise OK
- SOAP – no experience, I read it’s very verbose and complicated
- Google protobuf – read a lot of good things about this
- pure HTTP – using get and post – this may be badly extensible.
I’m open to suggestions. So far i’m leaning towards protobuf.
Edit: More info
- The server will be data heavy, thin application layer, possibly only database itself. Milions to a billion records, search intensive (fultext and custom searches).
- Expected client application count is in hundeds, but may grow
- 2 types of messages from server to client, small (under 100KB), but very common, large (file downloads, under 10MB cca)
- client sends back only the smaller messages but with more information.
- i’d like to have information structured, to provide meta information both ways.
- i’d like it extensible for future changes
- Encryption mandatory (considering https as transport layer)
- Lantency is crutial, I’d like to achieve “standard” web latencies (under 200ms would be good), for the small messages. This really depends on many things.
I would use simple HTTP, TCP (with sockets) or FTP, unless your really need some more sofisticated functionalities