At Beyond Velocity we rely on XMPP for push notifications in many of our applications. XMPP is a messaging standard that uses extensible XML stanzas to communicate over a TCP/IP connection.
There are a number of solid, secure, high performance, open-source XMPP servers available, such as OpenFire and EJabberd. To communicate with a server, you need a client/component XMPP library for the language you are using. There are many available, both commercial and free.
As a pet project, I’ve recently begun work on a C# library for XMPP client and component development. The goal is to make it extremely easy to call services implemented in components, and to hide the XMPP details from the developer.
For example, a service will look like this:
using Velocity.Component; namespace Velocity.Services { [Service("echo")] public class EchoService { public string Echo(string text) { return text; } } }
A generator will create the client side API, providing a web-service like proxy.
Each IQ stanza is required to return a result, so being an asynchronous messaging system, there’s some work to be done on the architecture/design front.
Right now the goal is to implement the XMPP essentials and the communication plumbing. It’s early days, but I’m off and running. The project is hosted on Github here.
To learn more about XMPP the best place to start would be the official site. The guys from ProcessOne have some excellent videos up on YouTube here, they specialize in EJabberd, Erlang and recently Elixir. There are a number of books available, my personal favorite (although a bit dated) is Instant Messaging in Java.
And for a deeper dive, here is the first video from ProcessOne’s Xmpp Academy series: