January 31st, 2014

Pushing System and Technology

by Claudio Di Cosmo

In the past 20 years we have seen the evolution of internet from a "motionless" bunch of information to an interactive system where all information are directly provided by all users. This kind of evolution started from the necessity of the new trading systems to receive data with the lowest latency possible. Since the HTTP protocol didn't and doesn't support a direct and stateful connection from the server to the client, new approaches were experimented. The most popular are:

  • Long Polling: This technique is based on a polling made by the client. When the connection is established with the server, it will leave the connection open until there is something to reply. This is a very easy implementation that gives a great flexibility, since the first connection is opened by the client it can be used in every situation (eg.: SSL pages) without any additional effort
  • Flash XMLSocket relays: This technique is largely used in chat systems. The client establishes a first connection where it gets a unique code. After that it does another connection using as information the identifier received. From this point the server will dispatch all information related to that ID. To do so a new socket for transport is created, called Flash Socket which gives the possibility to leave the connection always open, also after the the server's response.

These implementations can be grouped in the design pattern called Comet. This was formulated in 2006 and describes a model where a long-held connection is established between a Client and Server which enables the flow of information from the Server without an explicit request from the Client.

In more recent years a new technology showed up which aims to "shake up" the concept of Push Technology: WebSocket. The main difference, compared to the other solutions, is that WebSocket is a transport layer built over the application which enables a full-duplex communication between Client and Server!

In order to maximize the collaboration experience in Agilo for Scrum, we have also adopted the Comet approach. The main benefits given to the user are having an always up to date vision of the Sprints and an easier coordination of the team, especially in distributed teams.

The tool used is Tornado, which is an open source python-written web framework implemented by Facebook developers for non blocking connections. The main reasons of our choice are:

Push systems comparison chart

  • The Simplicity of the setting up and running
  • The very high performance and connection scalability (see picture above)
  • The supported integration with our main web framework Django

For now Tornado offers the long polling implementation which gives a very high flexibility on the usage. A new version of it with support to WebSocket is in development and we are looking forward to see how it can improve the collaboration experience of our users.


The picture is taken from the Facebook developers blog


Claudio Di Cosmo

I am a Software Engineer. I love programming and I am always fascinated by all the new "Techy" innovations.

Posted in Development
blog comments powered by Disqus