Skip to content

Add echo framework - #1115

Open
nigrosimone wants to merge 2 commits into
MDA2AV:mainfrom
nigrosimone:add-echo
Open

Add echo framework#1115
nigrosimone wants to merge 2 commits into
MDA2AV:mainfrom
nigrosimone:add-echo

Conversation

@nigrosimone

@nigrosimone nigrosimone commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Description

Adds Echo v4 on Go net/http, standard mode.

  • meta.json: Go / flagship / standard, subscribed to baseline, pipelined, limited-conn, json, json-comp and upload
  • main.go: routing and path/query binding through the Echo API, c.JSON for the response, the Echo Gzip middleware for json-comp

./scripts/validate.sh echo passes locally, 23 checks.

Disclaimer

I am neither the maintainer nor affiliated in any way with this framework. I did my best to implement it correctly, using Opus 5 as a guide.

@nigrosimone
nigrosimone marked this pull request as ready for review August 14, 2026 05:47
@nigrosimone

Copy link
Copy Markdown
Contributor Author

/benchmark -f echo --save

@github-actions

Copy link
Copy Markdown
Contributor

👋 Benchmark request received. A collaborator will review and approve the run.

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results

Framework: echo | Test: all tests

Test Conn RPS CPU Mem Δ RPS Δ Mem
baseline 512 313,482 2445.6% 78MiB ~0% ~0%
baseline 4096 522,121 3655.3% 208MiB ~0% ~0%
pipelined 512 785,237 3191.2% 91MiB ~0% ~0%
pipelined 4096 1,167,118 4226.6% 336MiB ~0% ~0%
limited-conn 512 126,710 1892.2% 60MiB ~0% ~0%
limited-conn 4096 159,146 2058.3% 63MiB ~0% ~0%
json 4096 216,828 3260.7% 108MiB ~0% ~0%
json-comp 512 189,101 5612.2% 314MiB ~0% ~0%
json-comp 4096 195,532 5605.1% 1.2GiB ~0% ~0%
json-comp 16384 197,667 5642.6% 1.4GiB ~0% ~0%
upload 32 2,442 2197.8% 42MiB ~0% ~0%
upload 256 2,922 3852.9% 64MiB ~0% ~0%
Full log
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     32 (0/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   13.58ms   12.60ms   33.50ms   38.30ms   41.40ms

  11750 requests in 5.00s, 11750 responses
  Throughput: 2.35K req/s
  Bandwidth:  335.48KB/s
  Status codes: 2xx=11750, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 11750 / 11750 responses (100.0%)
  Reconnects: 2351
  Per-template: 2924,2916,2931,2979
  Per-template-ok: 2924,2916,2931,2979
[info] CPU 2187.9% | Mem 40MiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     32 (0/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   13.24ms   5.42ms   33.10ms   37.90ms   40.10ms

  12060 requests in 5.00s, 12061 responses
  Throughput: 2.41K req/s
  Bandwidth:  344.35KB/s
  Status codes: 2xx=12061, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 12061 / 12061 responses (100.0%)
  Reconnects: 2418
  Per-template: 3027,3020,2982,3032
  Per-template-ok: 3027,3020,2982,3032
[info] CPU 2324.4% | Mem 41MiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     32 (0/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   13.07ms   11.00ms   32.60ms   37.10ms   39.40ms

  12213 requests in 5.00s, 12213 responses
  Throughput: 2.44K req/s
  Bandwidth:  348.72KB/s
  Status codes: 2xx=12213, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 12213 / 12213 responses (100.0%)
  Reconnects: 2440
  Per-template: 3050,3048,3036,3079
  Per-template-ok: 3050,3048,3036,3079
[info] CPU 2197.8% | Mem 42MiB

=== Best: 2442 req/s (CPU: 2197.8%, Mem: 42MiB) ===
[info] input BW: 19.37GB/s (avg template: 8516680 bytes)
[info] saved results/upload/32/echo.json
httparena-bench-echo
httparena-bench-echo

==============================================
=== echo / upload / 256c (tool=gcannon) ===
==============================================
[info] waiting for server...
[info] server ready

[run 1/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     256 (4/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   82.53ms   67.40ms   161.50ms   329.60ms   454.00ms

  14464 requests in 5.03s, 14474 responses
  Throughput: 2.88K req/s
  Bandwidth:  410.92KB/s
  Status codes: 2xx=14474, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 14474 / 14474 responses (100.0%)
  Reconnects: 2842
  Per-template: 3535,3618,3619,3702
  Per-template-ok: 3535,3618,3619,3702
[info] CPU 3907.8% | Mem 59MiB

[run 2/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     256 (4/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   81.19ms   67.60ms   154.30ms   308.50ms   436.60ms

  14609 requests in 5.03s, 14629 responses
  Throughput: 2.91K req/s
  Bandwidth:  415.33KB/s
  Status codes: 2xx=14629, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 14629 / 14629 responses (100.0%)
  Reconnects: 2884
  Per-template: 3594,3684,3717,3634
  Per-template-ok: 3594,3684,3717,3634
[info] CPU 3906.6% | Mem 66MiB

[run 3/3]
gcannon v0.5.3
  Target:    localhost:8080/
  Threads:   64
  Conns:     256 (4/thread)
  Pipeline:  1
  Req/conn:  5
  Templates: 4
  Expected:  200
  Duration:  5s


  Thread Stats   Avg      p50      p90      p99    p99.9
    Latency   80.75ms   67.70ms   152.60ms   303.80ms   420.00ms

  14682 requests in 5.03s, 14699 responses
  Throughput: 2.92K req/s
  Bandwidth:  417.21KB/s
  Status codes: 2xx=14699, 3xx=0, 4xx=0, 5xx=0
  Latency samples: 14693 / 14699 responses (100.0%)
  Reconnects: 2892
  Per-template: 3620,3706,3728,3639
  Per-template-ok: 3620,3706,3728,3639
[info] CPU 3852.9% | Mem 64MiB

=== Best: 2922 req/s (CPU: 3852.9%, Mem: 64MiB) ===
[info] input BW: 23.18GB/s (avg template: 8516680 bytes)
[info] saved results/upload/256/echo.json
httparena-bench-echo
httparena-bench-echo
[info] skip: echo does not subscribe to api-4
[info] skip: echo does not subscribe to api-16
[info] skip: echo does not subscribe to static
[info] skip: echo does not subscribe to static-tls
[info] skip: echo does not subscribe to async-db
[info] skip: echo does not subscribe to crud
[info] skip: echo does not subscribe to fortunes
[info] skip: echo does not subscribe to baseline-h2
[info] skip: echo does not subscribe to static-h2
[info] skip: echo does not subscribe to baseline-h2c
[info] skip: echo does not subscribe to json-h2c
[info] skip: echo does not subscribe to baseline-h3
[info] skip: echo does not subscribe to static-h3
[info] skip: echo does not subscribe to gateway-64
[info] skip: echo does not subscribe to gateway-h3
[info] skip: echo does not subscribe to production-stack
[info] skip: echo does not subscribe to unary-grpc
[info] skip: echo does not subscribe to unary-grpc-tls
[info] skip: echo does not subscribe to stream-grpc
[info] skip: echo does not subscribe to stream-grpc-tls
[info] skip: echo does not subscribe to echo-ws
[info] skip: echo does not subscribe to echo-ws-pipeline
[info] skip: echo does not subscribe to echo-ws-limited
[info] rebuilding site/data/*.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/frameworks.json
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/results/echo.json - 12 new, 12 total
[updated] /home/diogo/actions-runner/_work/HttpArena/HttpArena/site/data/current.json
[info] done
[info] restoring loopback MTU to 65536

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant