Comparing ws to nostr shows you might not understand how ws actually works. You realize after connection setup it's just a tcp socket? It's not framed by http headers if that's what you're wondering. The ws frame is like 6 bytes.
That connection setup has a huge amount of complexity in it. The fact the complexity is front-loaded doesn't negate the complexity. You have to include an HTTP parser and a copy of SHA1 for basically no good reason.