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.
I knew that other developers had a better grasp on the full stack than I did, but diving deep under the hood is one of the things that really made me a better developer all around.
I recently read a great thread that asked "What did the really successful programmers do differently?". This response really caught my
> Be ready, willing, & able to deep dive multiple levels at any time. You must know what's going on under the hood. There is a strong correlation between "number of levels of deepness understood" and "programming prowess".
In this book I'll teach you these fundamentals using Ruby. I'll start with the fundamentals that are portable to any environment. Then I'll show you the beautiful abstractions that Ruby has layered on top of them.
Learning this stuff doesn't just apply to Ruby, or any other language. 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. Ruby is no exception. 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.
What you'll
* The steps in the lifecycle of servers and clients. * The various ways that we can read and write data in Ruby, and when they're appropriate. * All the things you were never quite sure EOF, listen queues, TCPNODELAY, and tons more. * The low level methods required for constructing sockets, as well as the syntactic sugar that Ruby provides. * Known methods that will help you improve socket performance. * Basics of SSL sockets. * Should you write a lot of data at once or chunk it into smaller writes? * Get comfortable with the socket programming API that's available in any modern programming language. * More example code than you shake a stick at! * A look at 6 different architecture patterns for building concurrency into your network programs. * A closer look at a few different FTP and Redis. * Multiplexing connections, non-blocking IO, socket timeouts, socket options, and more...
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.