Web Socket Protocol

Web Socket is a new protocol, standardised in RFC 6455, attempting to bring the best features of HTTP & TCP together.  More specifically, it aims at being Connected & full-duplex (as TCP), allowing server to call-back clients and universal (as HTTP).

This wasn’t done without pain.  Web Socket has a non-trivial handshake process, done over HTTP, after which the underlying TCP connection is used.  The handshake involves exchanging a key.  The key exchange ensures Server & Client are aware of the Web Socket Protocol.  It also makes the protocol much harder to implement in your beloved garage.

Web Socket provides a packet-framing Data Transfer protocol after the exchange.  This allows both servers & clients to exchange data in a predefined way with low-overhead.

Web Socket is aiming at replacing long pooling in rich web sites, thus allowing Servers to update client in real time in an efficient manner.

I’m a little sceptical about that protocol.  Beside the Byzantine aspect of handshake (designed to fool intermediary to believe Web Socket is just HTTP, hence not requiring any Routers on Earth to be updated for the protocol to work), I question its scalability.  We need servers to keep TCP connection with clients.  What happen if the server fails?  How do we load-balance?  The beauty of the HTTP protocol is that it was connection-less hence client-server interaction were bound in time which allows us to make a lot of things, for instance, load balancing requests on a web server farm.  With Web Socket, it seems that we become stateful.

What we really need to fix the long pooling problem is a way for a server to establish a connection with a client.  Because this is impossible in most cases due to firewall rules, we come up with a complicated mechanism approximating the behaviour we want and bringing challenges with it.

This is another instance of the sclerosis of Internet:  the inability for the Internet to fundamentally evolve beyond its 1995 design.  IPv6 anyone?

Ok, this rant aside, Web Socket is a well thought-through protocol supported by both Windows 8 & IIS.  It works.


You can find a very good description of the protocol and its implementation in Windows 8 in Kenny Kerr’s MSDN article.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s