High-performance non-blocking static file serving web server implementation written in FASM, mostly inspired by tiny-nginx.
Naturally with this being x86 assembly using raw syscalls, it won't work on anything other than a Linux x86-64 machine.
Relayouter is a very small (currently ~5.3 KiB) nginx-like http server that is:
- written in x86 assembly without libc (or any linking at all),
- parallelized across multiple processes bound to each CPU core,
- utilizing
epollfor efficient I/O multiplexing, - using only a single arena allocation for sharing data between processes (everything else is stack allocated),
- able to decode URLs and detect MIME types properly.
Note
There are some critical bugs I need to fix with this. It's also very easily exploitable so don't use this in anything important.
# clone the repo
git clone "https://github.com/peachey2k2/relayouter.git"
cd ./relayouter
make build # build
make run # build and runIt'll be hosted on http://localhost:8080/ and serve from ./public
- recover from more errors
- switch to edge-triggered
- redo jumps with consideration for branch predictions
- reorganize the files
- configuration system
