# web Web server. ## Features - High performance - Low latency - Radix tree routing ## Installation ```shell go get git.akyoto.dev/go/web ``` ## Usage ```go s := web.NewServer() // Static route s.Get("/", func(ctx web.Context) error { return ctx.String("Hello") }) // Parameter route s.Get("/blog/:post", func(ctx web.Context) error { return ctx.String(ctx.Get("post")) }) // Wildcard route s.Get("/images/*file", func(ctx web.Context) error { return ctx.String(ctx.Get("file")) }) s.Run(":8080") ``` ## Tests ``` PASS: TestBytes PASS: TestString PASS: TestError PASS: TestErrorMultiple PASS: TestRequest PASS: TestRequestHeader PASS: TestRequestParam PASS: TestWrite PASS: TestWriteString PASS: TestResponseCompression PASS: TestResponseHeader PASS: TestResponseHeaderOverwrite PASS: TestPanic PASS: TestRun PASS: TestBadRequest PASS: TestBadRequestHeader PASS: TestBadRequestMethod PASS: TestBadRequestProtocol PASS: TestEarlyClose PASS: TestUnavailablePort coverage: 100.0% of statements ``` ## Benchmarks ### wrk ```shell wrk -t12 -c1000 -d2s http://127.0.0.1:8080/ ``` ``` Running 2s test @ http://127.0.0.1:8080/ 12 threads and 1000 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.83ms 2.07ms 33.95ms 88.04% Req/Sec 50.38k 5.34k 64.92k 71.67% 1207398 requests in 2.03s, 46.06MB read Requests/sec: 595860.16 Transfer/sec: 22.73MB ``` ### rewrk ```shell rewrk -t 12 -c 1000 -d 2s -h http://127.0.0.1:8080 ``` ``` Benchmarking 1000 connections @ http://127.0.0.1:8080 for 2 second(s) Latencies: Avg Stdev Min Max 3.06ms 1.73ms 0.03ms 39.14ms Requests: Total: 640447 Req/Sec: 324514.85 Transfer: Total: 24.43 MB Transfer Rate: 12.38 MB/Sec ``` ### ali ```shell ali --rate=10000 --duration=0 http://127.0.0.1:8080/ ``` ``` Latencies: P50: 90μs P90: 138μs P95: 160μs ``` ### oha ```shell oha -z 2s --no-tui http://127.0.0.1:8080/ ``` ``` Summary: Success rate: 100.00% Total: 2.0003 secs Slowest: 0.0034 secs Fastest: 0.0000 secs Average: 0.0002 secs Requests/sec: 265346.5118 ``` ### go-wrk ```shell go-wrk -c 1000 -d 2 http://127.0.0.1:8080/ ``` ``` Running 2s test @ http://127.0.0.1:8080/ 1000 goroutine(s) running concurrently 355214 requests in 1.97068379s, 8.81MB read Requests/sec: 180249.11 Transfer/sec: 4.47MB Avg Req Time: 5.547877ms Fastest Request: 30.66µs Slowest Request: 95.208812ms Number of Errors: 0 ``` ## License Please see the [license documentation](https://akyoto.dev/license). ## Copyright © 2024 Eduard Urbach