TODO: X Get more knowledge about the Reactor front ends. X Throw up some examples in some slides (#5). X Add a section at the end to get out of the weeds and put a bit ol' bow on it. Topics: 1. Evolution of event-driven programming: X Wait for a key press or line of text. X Interrupts (hardware and software). X Modern event loops 2. Types of events in modern applications: X IO X Timer X User input X Signal X Anything that can spontaneously happen in the real world. 3. How to write a modern event-loop (reactor style). X kernel facilities (poll, select, etc.) 4. List of already-built reactors. X EV X Glib X ... 5. Event-driven programming in Perl X AnyEvent X IO::Async X Mojo::IOLoop X POE 6. Special considerations X Exceptions in event-driven code. X SIGPIPE, EPIPE - might have more to do with long-lived processes rather than just event-driven programming, but still something to watch out for... X You should almost always check the return code of your syscalls to see if they succeeded or not. 7. Promises: X Future X Future::AsyncAwait X Future::Utils 8. Real-world uses for event-driven applications: - Webhooks - PubsubHubbub - msg queue Other topics: X What is event-driven programming? X Reactor: event loop that can receive multiple types of events and demultiplex them, delivering them to appropriate handlers. - C10k problem - EDA (event-driven architecture) X Benefits of Event-driven X How to debug event-driven code. Traditional programs: - CGI - web server calls your program, and your program does its thing and finishes. X filters - grep, less, sed, etc. Like a function, the program takes its input and produces some output. Perl features: - first-class subroutines - Can mix traditional architecture with event-driven (like docker that provides both an http and command-line interface.