Http sever, threads.
When we are talking about scalability we should always start from IO. It is well reworked during last years, let's look into the history.
HTTP 1.0
Nobody remembers how it was, just the fact that on each call server to client connection was opened and closed. Some overhead of course.
HTTP 1.1
Persistente connections helped to solve the issue with opening closing the TCP connection for each request, now connection can be reused for several request - response sessions.
From the session protocol, until the coming of Web Sockets we weren't expect any possible improvements. Some rework was done on server level: