I would like to implement an Client-Server Application, where the business-logic, security validations and a database are at the server and the user interface are at the client.
I would like to implement clients in different languages i.e. one in WPF/.NET, one Swing/Java , one in Android/Java and maybe one HTML/JavaScript client. The server will be on Internet, so I would like to be able to have encrypted communication.
The client will send some lists of items to be added to the database, or update items, and do some transactions. The server will check if the items are already updated by another client, or update the item, add new items or delete items.
How do I solve the communication between clients and the server in such a system?
I have been thinking about:
http/https webserver, and sending messages in JSON or XML and use Web Sockets for bi-directional communication. Use http in a RESTful way, except when WebSockets are needed. But I guess there are better solutions for native desktop applications than http?
CORBA - I have just heard about it, and it's old and complex. Not much talk about it these days.
XMPP/Jabber - I have just heard about it and I don't know if it fits me at all. EJabberd seams to be a popular implementation.
AMQP - I have just heard about it and I don't know if it fits me at all. RabbitMQ seams to be a popular implementation.
Windows Communication Foundation, Java RMI, Java Message Service - but are they language independent?
I guess some of these alternatives are on different levels, maybe I can have i.e xmpp or amqp in web sockets over https?
What technologys are used for this problem in companies today? and what is recommended to use? I have no experience of them other than webservers and http. Please give me some guidance in this jungle. What are the pros and cons of these technologies in my situation?