Realtime multicasting over HTTP/XMPP
Push is hard. Often, implementing realtime push in a website or web service means having to use unfamiliar software or frameworks. If it isn’t an XMPP server with BOSH, then it’s an esoteric HTTP server framework like Node.js or Tornado. Further, while the knowledge and tools necessary for load balancing a traditional web service are commonly found these days, scaling out and operating a push architecture is less straightforward. The interactions between server nodes are different. The traffic patterns are different. Even if you’ve got a handle on whatever particular approach for push you’re using today, do you know how you’ll scale it tomorrow?
Fanout Cloud is a new service that makes implementing realtime push a heck of a lot easier. Simply use the Fanout Cloud API to publish messages to interested subscribers and let us handle the complexity of maintaining client connections, pushing messages, and all operational and scaling concerns. What makes Fanout Cloud different from similar solutions is that it supports pushing data over a variety of transports, and it allows you to do so in a format-agnostic fashion. Below is a list of the supported transports and the payload customizability of each:
- HTTP long-polling: accept any kind of request, and you specify the response code, status, headers, and body.
- HTTP streaming: accept any kind of request, and you specify the initial response code, status, headers, and then a series of body payloads to be appended.
- XMPP stanzas: you specify the entire XML stanza.
- Webhooks: you specify the HTTP verb, path, headers, and optional body. Any HTTP response is ignored.
This kind of transport versatility is one of our founding principles. Fanout Cloud does not expose a proprietary protocol to those who consume the service unless you want it to. It can be made to expose your protocol. Or a standard protocol. Want to transmit Atom? JSON Activity Streams? How about some raw binary? All are possible. This versatility means you can migrate any existing service to Fanout Cloud, without third party consumers even noticing you made the switch. It also means that if you’re not satisfied with the service, you can migrate away. It’s your protocol, after all. No vendor lock-in here!
That said, there is also the FPP (Fanout Pubsub Protocol) transport, which is a proprietary HTTP-based protocol meant to be interfaced with Fanout’s corresponding JavaScript library. This transport pushes JSON payloads only, and is intended for developers who want to build a website quickly and do not care so much about what the protocol to the server actually looks like. UPDATE: Fanout Cloud now supports the open Bayeux protocol as well.
Fanout Cloud was born out of my experience working as CTO at Livefyre. The rapid growth of our commenting platform made scaling out quite a struggle, particularly when it came to the realtime features. We debated about working with a cloud push service, but the problem is they all had proprietary protocols or required us to use their JavaScript libraries (an outrageous requirement to have, given that our public API was not browser-specific). Ultimately we considered the transition costs and potential lock-in to be dealbreakers. When I left Livefyre in late 2011, I set out to build the cloud push service that didn’t yet exist: the one that I would have been able to choose with confidence. Fanout Cloud is that service.
Fanout Cloud is available today and free to try. If you are building a website, REST API, app, or other service, and are interested in learning more about how Fanout Cloud can bring joy to your life, let us know.
Recent posts
-
We've been acquired by Fastly
-
A cloud-native platform for push APIs
-
Vercel and WebSockets
-
Rewriting Pushpin's connection manager in Rust
-
Let's Encrypt for custom domains