Skip to content

Mquarmoc/relayouter

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

relayouter

High-performance non-blocking static file serving web server implementation written in FASM, mostly inspired by tiny-nginx.

image

Naturally with this being x86 assembly using raw syscalls, it won't work on anything other than a Linux x86-64 machine.

Overview

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 epoll for 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.

Usage

# clone the repo
git clone "https://github.com/peachey2k2/relayouter.git"
cd ./relayouter

make build # build
make run   # build and run

It'll be hosted on http://localhost:8080/ and serve from ./public

Todo

  • recover from more errors
  • switch to edge-triggered
  • redo jumps with consideration for branch predictions
  • reorganize the files
  • configuration system

About

minimal, multi-process, super fast http server written in assembly

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Assembly 92.7%
  • JavaScript 4.1%
  • CSS 1.2%
  • Other 2.0%