The Keeping it Realtime Conference in Portland showcased bleeding edge technology that will no doubt create waves, perhaps even a boom in technology akin to what Ruby on Rails did a few years ago. The Keeping it Realtime conference could have easily been titled the Node.js / Websockets / PubSub Conference. It was paradise for a techie interested in building massively scalable applications with Node.js and messaging systems. For me it was a chance to stay current with the bleeding edge and analyze ways to meld that with the projects I work on. Seriously, they jokingly played around with calling it the Keeping it Hype-Train Conference.
So, what is the Realtime Web?
In a nutshell, the Realtime Web is centered on ‘Push’ technology. Users get information they are interested in as it becomes available, instead of having to go out and find it.
A good analogy is the way a smoke alarm works.
A smoke alarm does not require constant checking. When a smoke alarm senses smoke it beeps. Really, push events are not new. The idea has already been captured in RSS readers, email, event based data feeds, stock alerts, etc.
What is new is the emerging technology that helps make Realtime easier on the web.
WebSockets:
One enabler of Realtime is the underutilized HTML5 feature called WebSockets. With WebSockets, bi-directional (full-duplex) communication between the browser and a server is possible. This is all done with an easy to use JavaScript API. Unlike an AJAX request, WebSockets have less latency, less overhead (no headers), and can work in either direction. The prefect example of using WebSockets is a stock ticker. Instead of the browser having to ask the server for updates, the server just pushes updates to the client. There is a lot of potential here!
Other features of HTML5, such as canvas also play a role in making the Realtime web look and feel more like native applications.
An additional technology related to WebSockets is WebRTC (Real time communication). The idea there is to allow web browsers to talk directly to each other using a JavaScript API. The HTML5 version of Quake has already been made multi-player with WebSockets, but WebRTC would make multi-user applications trivial.
NodeJS
Node.js (aka Node) was all the rage at the Realtime conference. Why is this? Well, Node has a unique architecture that is compelling for a number of reasons. Node is an event driven I/O based server side framework that uses JavaScript. It runs the V8 engine – the same JavaScript engine used in Chrome. It is powerful in that it is its own daemon, so Apache is not needed. It is very efficient at what it does. According to this post, only a J2EE server can match its speed. Node blows the doors off Python and Ruby. However it is important to keep in mind how new Node is, which makes any benchmark a bit unfair since the other frameworks do so much more and have years of maturity and stability behind them. Inherently, Node can load balance, proxy, and do all sorts of interesting routing – all with very little code. It is cool, it is new, and it is lightweight, what more does a developer want?
An interesting thing I noticed at the conference is that Microsoft has their eye on Node. One of Microsoft’s goals is to get Node going on the Azure platform. That is exciting if not a little scary for the Node community! As of just a few days ago Node version 0.6 was released which is compatible with Windows. I verified this myself on my Windows 7 laptop. The binary node.exe is about 4MB and that is all you need to run the hello world app!
Thoughts for going forward with Realtime:
Smoke detectors are annoying to listen to, but required by law. For Realtime to be successful, it will need to be non-invasive and complimentary to a user experience, not a source of constant interruption.
Chat applications and geo-social gaming seem to be the obvious routes. Kyle Drake gave a great talk (perhaps the best talk of the conference) on a geo-social game he helped create at Geoloqi called MapAttack. Warning – do not use a motorized vehicle to collect way-points! The game is so good, you will run over somebody.
The Realtime web could easily be called Web 2.5 or Web 3.0. It is just another term being tossed around to describe a set of emerging technologies that include WebSocket, Node, and XMPP. By definition, bleeding edge technologies have a lack of consensus around them. It will take time for the dust to settle on all this.