Web Socket Overview


What is Web Socket

  • It is a Bidirectional, full Duplex protocol to communicate between client and server over the web
  • It is used in Chatting, notifications, real-time feeds, multiplayer gaming

HTTP 1.0


  • HTTP Protocol 1.0 Recap, is built on TCP protocol when it was first built as a request-response system
  • The Server cannot randomly send requests to clients it needs to be requested for something to respond to ie client has to initiate the request first
  • After Each Request, the connection is closed and for each request, the connection has to be established again
  • Consider the example where the client requests 10 images for each request the server will (open and close connection) x10 for each image to receive which is costly for the server and the client

HTTP 1.1


  • Realizing the previous implementation of HTTP 1.1 was made which once made a request to keep the connection open
  • It keeps the connection open using the Header “ keep-alive” in the header which is an epithermal header and cannot be propagated through proxies
  • Once a Connection is made it remains open and subsequent requests can be made using the same TCP connection
  • We Close the connection once not needed

Web Sockets


  • Web Socket uses HTTP 1.1 between client and server
  • It’s a stateful protocol since the client and server are both aware of each other
  • HTTP is Stateless
  • We open a connection and do a Websocket Handshake
  • Once the WebSocket handshake happens it detach from HTTP and becomes a binary protocol
  • Anyone can send data to anyone, using the underlying TCP connection API
  • The client can send all data to the server
  • The server can send all data to the client
  • Both can concurrently send data to each other etc etc

WebSockets Handshake


  • WS:// or wss:// similar to HTTP and HTTPS
  • The First request we make is normal HTTP GET request, which asks the server to upgrade to 1.1
  • The Server will reply 101 Switching protocol, and become binary protocol


  • The key is used for seeding and hashing to generate a new key
  • Can you use the Existing Server or a do it manually to implement the same

WebSockets use cases

  • Chat Application
  • Live Feed
  • Multiplayer gaming (Multiple clients means maintaining multiple states ie scaling stateful is difficult )
  • Showing client progress/logging

Example Implementing WebSockets in Node JS

Web Sockets Pros and Cons


  • Full-duplex (no polling), not have to ping the server all the time to get some status or progress update
  • HTTP compatible
  • Firewall friendly (standard) (80 if Insecure ) (443 when Secure)


  • Proxying is tricky L7, have to break the connection and create another to the backend (L4 works better)
  • L7 load balancing challenging (timeouts)
  • Stateful, difficult to horizontally scale

Do we Have to use a Web Proxy?

  • No !, Rule of thumb - do we absolutely need bi-directional communication
  • Long polling
  • Event Source


This post is licensed under CC BY 4.0 by the author.