Do you know how your web server opens a socket, binds to an address, and accepts a connection? I did a lot of web programming before I had enough knowledge to dig in and figure this stuff out!
This book will teach you these fundamentals using Ruby. It starts with the fundamentals that are portable to any environment. Then shows you the beautiful abstractions that Ruby has layered on top.
Learning this stuff doesn't just apply to Ruby: every modern programming language has support for networking. Every language has their own way of doing things, but all modern languages support the Berkeley Sockets API. There's certainly plenty of syntactic sugar, but below the sugar you can use the same Sockets API that you would in C, Java, Python, whatever.
This is portable knowledge that will serve you for many years to come.
This was a fantastic treatment of *nix socket programming. While viewed through a ruby lens (the author relies on the ruby socket library for building client/server examples), the book does a tremendous job introducing the reader to the fundamentals of socket programming, common gotchas, and architectural patterns for building fast servers. He brings a lot of clarity to underlying servers such as nginx, puma, eventmachine, and unicorn. I cannot recommend this highly enough for those wanting to get a deeper understanding socket programming basics.
Similarly to Working with Ruby Threads, I'm glad to have learned more about this topic and have a reference to go back to should I want to build a server or need to do this socket programming. The most practical part for me is better understanding the general patterns and associated tradeoffs for different Ruby web servers.
A bit heavy on the Ruby. You'll still be able to understand the code even if you're not a Ruby programmer, but the book does spend a non-trivial amount of time talking about Ruby-specific stuff. It's still interesting though, so it's not a big deal.