fanout blog

Wafting bits in your general direction

Realtime API design guide

Posted by justin on April 2nd, 2015 — Filed under API, API Design, Webhooks, WebSockets

New to the subject of realtime APIs? This article is the place to start! We’ll discuss the most common design approaches and their pros/cons, as well as link to the documentation of 16 public realtime APIs that you can use for inspiration.


Stateless WebSockets with Express and Pushpin

Posted by justin on March 9th, 2015 — Filed under GRIP, Pushpin, WebSockets

One of the most interesting features of the Pushpin proxy is its ability to gateway between WebSocket clients and plain HTTP backend servers. In this article, we’ll demonstrate how to build a WebSocket service using Express as the HTTP backend behind Pushpin.


Bayeux / Faye compatibility

Posted by justin on January 21st, 2015 — Filed under Fanout, Protocols

Bayeux is one of the few standard protocols for publish-subscribe messaging on the web. Today we announce Bayeux compatibility in the realtime push service. When you publish JSON objects through our service, they can be received by any Bayeux-compatible client library, such as Faye.


Building a realtime API in Django

Posted by justin on November 6th, 2014 — Filed under Fanout, GRIP, Python, WebSockets

Django is an awesome framework for building web services using the Python language. However, it is not well-suited for handling long-lived connections, which are needed for realtime data push. In this article we’ll explain how to pair Django with Fanout to reach realtime nirvana.


Do you have a contingency plan?

Posted by Chris Stewart on October 24th, 2014 — Filed under Fanout

Do you have a microservice contingency plan?


How many APIs does your company consume? How many microservices do you depend on? This brave new world of public APIs and microservices is great, but what happens when it’s not?

What happens when a service raises their prices, changes their metering, dies (bankruptcy, acquisition, sunset), pivots, experiences a major outage, or any number of problems facing modern technology companies? These are cross-team problems affecting ops, engineering, and business teams. How will each handle the problem?

Think about how your company consumes these APIs and plan for the worst.

There is no one right answer, but here are some things that should be explored when considering a microservice.

  • Do they offer an open-source version that you could have ready to go if necessary?
  • Will they place code in escrow in the event that they go under? You have a better chance at making this work if you’re a big player, but it’s worth bringing up.
  • How interoperable are they with the competition? Think Amazon vs Rackspace. Switching from one to another isn’t exactly fun, but it is possible to migrate without breaking much.
  • Have plans in place to “roll your own”. Writing code for this might be taking it too far (that’s the reason you’re consuming someone else’s API, right?), but at least have an idea of how you could accomplish the same features with your in-house team and a rough timeline.

So do you have a contingency plan? We’d love to hear your stories (good, bad, or otherwise) on the topic!

Calling Webhooks asynchronously with Zurl

Posted by justin on October 3rd, 2014 — Filed under Webhooks, ZeroMQ, Zurl

Zurl is an HTTP client daemon based on libcurl that makes outbound HTTP requests asynchronously. It’s super useful for invoking Webhooks. Zurl supports fire-and-forget invocation, error monitoring, and protection from evil callback URLs. Sounds pretty great, right? Let’s see how it’s done.


Mongrel2 HTTP server now in Debian/Ubuntu

Posted by justin on July 17th, 2014 — Filed under Fanout, Mongrel2, ZeroMQ

Mongrel2 is a fast and simple HTTP & WebSocket server that communicates to backend workers via ZeroMQ. It does one thing and does it very well, making it an ideal part of a componentized architecture. The code is event-driven, allowing it to support thousands of concurrent connections and also asynchronous behaviors. These properties are especially important to realtime applications.

Fanout has been one of the most active contributors to the Mongrel2 project over the past year, adding features such as TLS SNI and improved streaming capability. We’ve also been working on making the server easier for people to get started with. And with that, we are proud to announce official packages for Debian and Ubuntu!


You might not need a WebSocket

Posted by justin on June 24th, 2014 — Filed under Protocols, WebSockets

Before I begin, I want to say that WebSockets are great. I’ve even implemented RFC 6455 myself in Zurl and Pushpin, which are used by the service. also supports WebSockets via its XMPP-FTW interface using Primus.

However, after spending quite some time working on large distributed applications and gaining a greater appreciation of REST and messaging patterns, I feel that much of what typical web applications want to accomplish with WebSockets (or with socket-like abstractions) is perhaps better solved by other means.


Fun with Zurl, the HTTP/WebSocket client daemon

Posted by justin on February 18th, 2014 — Filed under Fanout, Webhooks, Zurl

Zurl is a gateway that converts between ZeroMQ messages and outbound HTTP requests or WebSocket connections. It gives you powerful access to these protocols from within a message-oriented architecture. The following diagram shows how Zurl may fit in among the entities involved:


Any number of workers can contact any number of HTTP or WebSocket servers, and Zurl will perform conversions to/from ZeroMQ messages as necessary. It uses libcurl under the hood.

The format of the messages exchanged between workers and Zurl is described by the ZHTTP protocol. ZHTTP is an abstraction of HTTP using JSON-formatted or TNetString-formatted messages. The protocol makes it easy to work with HTTP at a high level, without needing to worry about details such as persistent connections or chunking. Zurl takes care of those things for you when gatewaying to the servers.


Hacker News Live Comments

Posted by justin on February 16th, 2014 — Filed under Fanout

Earlier this week, a bookmarklet was released that enlivens Hacker News comment threads. This thing makes me feel like I have magic powers. You have no idea how often I would refresh pages on HN before I started using this, especially on posts that are my own or that I had commented on. Now I can simply leave pages open in tabs and go about my day. The page titles update whenever there are new comments.