[HN Gopher] Writing a toy WebSocket server from scratch
       ___________________________________________________________________
        
       Writing a toy WebSocket server from scratch
        
       Author : otras
       Score  : 47 points
       Date   : 2022-08-29 01:57 UTC (1 days ago)
        
 (HTM) web link (alexanderell.is)
 (TXT) w3m dump (alexanderell.is)
        
       | ok_dad wrote:
       | I love this article! I'm going to start my own series of "toys"
       | for my personal edification now, I never thought doing something
       | half-assed would be so much fun! I mean that with the utmost of
       | respect, too, because I have been stressing so much lately trying
       | to build something "commercializable" but I should have been
       | focusing on educating myself and having fun with tiny projects
       | like this, which can be completed in a few days.
        
         | keyle wrote:
         | You'll find that most successful software out there that
         | attempted to improve or innovate started as a "half assed" toy.
         | 
         | Otherwise the dude would have given up before it's complete.
         | 
         | No one on their own should aim at building a "cathedral". Build
         | a hut. Then add a toilet cause it sucks to shit outside. Then a
         | sewer system because it stinks. A tap to wash your hands. Might
         | add a bed to sleep overnight. Make that a bedroom. Ok now it
         | needs a shower.
         | 
         | 2 years from now you have your "cathedral" and other people
         | come shit in your toilet, so making it squeaky clean becomes a
         | priority.
         | 
         | People tend to forget the word software has "soft" in it.
        
           | ok_dad wrote:
           | > No one on their own should aim at building a "cathedral".
           | Build a hut. Then add a toilet cause it sucks to shit
           | outside. Then a sewer system because it stinks. A tap to wash
           | your hands. Might add a bed to sleep overnight. Make that a
           | bedroom. Ok now it needs a shower.
           | 
           | Nice way to look at it!
        
       | convolvatron wrote:
       | some peers...I think Chrome...will shut down your connection if
       | you don't have a WS layer keep alive
        
       | jstanley wrote:
       | I like writing toy servers too, but I don't get a lot of
       | opportunities, so my latest project is a programming challenge
       | that presents a new protocol spec every 2 weeks for people to
       | implement, and automatically tests the implementations[0].
       | 
       | OP says:
       | 
       | > Goal: write a basic server that can handle the WS handshake and
       | parse an incoming WS frame to see the message sent from the
       | client
       | 
       | > Non-goals: writing a robust or real HTTP server, writing a
       | fully compliant WS server, or handling all edge cases
       | 
       | This is a great way to get started with something that you don't
       | yet understand. I sometimes think of it as implementing "just
       | enough to trick people into thinking that it works".
       | 
       | FWIW, I think the implementation in this post has a bug whereby a
       | client that sends half an HTTP request will block the entire
       | server from accepting further connections, because
       | handle_request() makes blocking calls to recv() until it has a
       | full request, and the program can't accept new connections until
       | handle_request() returns. That's the spirit!
       | 
       | [0] https://protohackers.com/
        
         | macintux wrote:
         | This looks very cool, thanks for creating/sharing it. Might
         | have to dust off my Erlang for this.
        
         | paulgb wrote:
         | Sort of like Project Euler but for network programming? Very
         | cool!
        
       | paxys wrote:
       | "If you wish to make an apple pie from scratch, you must first
       | invent the universe" - Carl Sagan
       | 
       | It's interesting to see what different people mean when they say
       | "from scratch". In this case the lowest abstraction is (what
       | seems to be) Python's TCP library.
        
       ___________________________________________________________________
       (page generated 2022-08-30 23:00 UTC)