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.