Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/marcolucidi01/sws
Simple Small Static Stupid Whatever Web Server
https://github.com/marcolucidi01/sws
c http server simple small socket static stupid web
Last synced: about 11 hours ago
JSON representation
Simple Small Static Stupid Whatever Web Server
- Host: GitHub
- URL: https://github.com/marcolucidi01/sws
- Owner: MarcoLucidi01
- Created: 2019-10-13T15:02:32.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2019-12-29T19:01:53.000Z (almost 5 years ago)
- Last Synced: 2023-09-09T08:29:21.734Z (about 1 year ago)
- Topics: c, http, server, simple, small, socket, static, stupid, web
- Language: C
- Size: 142 KB
- Stars: 9
- Watchers: 5
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
sws: Simple Small Static Stupid Whatever Web Server
===================================================I was learning about sockets and network programming (yes, [Beej's guide](http://beej.us/guide/bgnet/))
and decided to implement a tiny HEAD GET only http server as exercise.the idea was to mimic and maybe improve what you can do with the command:
$ python3 -m http.server
it speaks HTTP/1.0 (more or less) and it will accept HTTP/1.1 requests, anything
else will be rejected.features
========- Connection keep-alive
- range requests (only one byte range is allowed)
- If-Modified-Since
- directory listing
- custom index page file (default index.html)install / uninstall
===================to install inside directory `/usr/local/bin/` run
$ make install
to uninstall run
$ make uninstall
usage
=====to serve your current working directory at http://localhost:8080 run
$ sws
to serve directory `/foo/bar` at http://localhost:8080 run
$ sws -r /foo/bar
to serve directory `/foo/bar` at http://localhost:6666 using file `home.html`
as index page run$ sws -r /foo/bar -p 6666 -i home.html
benchmarks
==========my machine is a i5-4300U @ 1.90GHz with 4GB of RAM running Linux 4.19 (Debian 10)
13 bytes ascii file
$ more hello
Hello World!
$ sws > /dev/null$ wrk -c 500 -t 10 -d 10s --latency http://localhost:8080/hello
Running 10s test @ http://localhost:8080/hello
10 threads and 500 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 18.71ms 107.40ms 1.67s 96.72%
Req/Sec 0.87k 697.31 4.26k 76.36%
Latency Distribution
50% 3.11ms
75% 3.96ms
90% 5.62ms
99% 450.05ms
78317 requests in 10.07s, 16.51MB read
Socket errors: connect 0, read 0, write 0, timeout 43
Requests/sec: 7774.18
Transfer/sec: 1.64MB1MB random file
$ head -c $(( 2 ** 20 )) /dev/urandom > foo
$ sws > /dev/null$ wrk -c 500 -t 10 -d 10s --latency http://localhost:8080/foo
Running 10s test @ http://localhost:8080/foo
10 threads and 500 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 62.64ms 155.25ms 1.94s 94.20%
Req/Sec 154.08 66.77 434.00 68.91%
Latency Distribution
50% 27.90ms
75% 45.25ms
90% 86.70ms
99% 881.81ms
15150 requests in 10.09s, 14.80GB read
Socket errors: connect 0, read 0, write 0, timeout 20
Requests/sec: 1501.31
Transfer/sec: 1.47GB64 entries directory listing
$ ls Music/Playlist\ Pink\ Floyd/ | wc -l
64
$ sws > /dev/null$ wrk -c 500 -t 10 -d 10s --latency http://localhost:8080/Music/Playlist%20Pink%20Floyd/
Running 10s test @ http://localhost:8080/Music/Playlist%20Pink%20Floyd/
10 threads and 500 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 34.22ms 139.70ms 1.84s 95.76%
Req/Sec 391.74 263.27 1.42k 64.00%
Latency Distribution
50% 10.50ms
75% 11.54ms
90% 12.81ms
99% 797.23ms
34812 requests in 10.10s, 285.65MB read
Socket errors: connect 0, read 0, write 0, timeout 48
Requests/sec: 3447.72
Transfer/sec: 28.29MBplease don't use this thing in any real world environment! I use it inside my
LAN to share files, stream videos and to play around with static websites.