From 796b11563c7ded549a486a8dba3f9c9d17380730 Mon Sep 17 00:00:00 2001 From: HBartosch Date: Wed, 20 May 2026 13:46:59 +0200 Subject: [PATCH 1/6] Add initial implementation of effinitive framework with Docker support and endpoints --- frameworks/effinitive/Dockerfile | 19 ++++ frameworks/effinitive/README.md | 35 +++++++ frameworks/effinitive/app/Models.cs | 57 +++++++++++ frameworks/effinitive/app/Program.cs | 59 ++++++++++++ .../effinitive/app/Tests/AsyncDatabase.cs | 69 +++++++++++++ frameworks/effinitive/app/Tests/Baseline.cs | 66 +++++++++++++ .../effinitive/app/Tests/Compression.cs | 50 ++++++++++ frameworks/effinitive/app/Tests/Database.cs | 96 +++++++++++++++++++ frameworks/effinitive/app/Tests/Json.cs | 49 ++++++++++ frameworks/effinitive/app/Tests/Upload.cs | 38 ++++++++ .../effinitive/app/effinitive-arena.csproj | 19 ++++ frameworks/effinitive/build.sh | 4 + frameworks/effinitive/meta.json | 32 +++++++ 13 files changed, 593 insertions(+) create mode 100644 frameworks/effinitive/Dockerfile create mode 100644 frameworks/effinitive/README.md create mode 100644 frameworks/effinitive/app/Models.cs create mode 100644 frameworks/effinitive/app/Program.cs create mode 100644 frameworks/effinitive/app/Tests/AsyncDatabase.cs create mode 100644 frameworks/effinitive/app/Tests/Baseline.cs create mode 100644 frameworks/effinitive/app/Tests/Compression.cs create mode 100644 frameworks/effinitive/app/Tests/Database.cs create mode 100644 frameworks/effinitive/app/Tests/Json.cs create mode 100644 frameworks/effinitive/app/Tests/Upload.cs create mode 100644 frameworks/effinitive/app/effinitive-arena.csproj create mode 100644 frameworks/effinitive/build.sh create mode 100644 frameworks/effinitive/meta.json diff --git a/frameworks/effinitive/Dockerfile b/frameworks/effinitive/Dockerfile new file mode 100644 index 00000000..87b575ee --- /dev/null +++ b/frameworks/effinitive/Dockerfile @@ -0,0 +1,19 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +WORKDIR /src +COPY . app/ +WORKDIR /src/app +RUN dotnet publish -c Release -o /out + +FROM mcr.microsoft.com/dotnet/runtime:10.0 + +ADD https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb /packages-microsoft-prod.deb + +RUN dpkg -i /packages-microsoft-prod.deb && rm /packages-microsoft-prod.deb \ + && apt-get update \ + && apt-get install -y --no-install-recommends libmsquic \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +WORKDIR /app +COPY --from=build /out . +EXPOSE 8080 8443/tcp 8443/udp +ENTRYPOINT ["dotnet", "effinitive-arena.dll"] diff --git a/frameworks/effinitive/README.md b/frameworks/effinitive/README.md new file mode 100644 index 00000000..567fe73c --- /dev/null +++ b/frameworks/effinitive/README.md @@ -0,0 +1,35 @@ +# effinitive + +Ultra-high-performance custom HTTP server for .NET 10 — built from scratch for maximum speed. + +## Stack + +- **Language:** C# / .NET 10 +- **Framework:** Effinitive (custom, no Kestrel) +- **Engine:** Custom TCP server with System.IO.Pipelines +- **Build:** Self-contained single-file publish + +## Endpoints + +| Endpoint | Method | Description | +|----------|--------|-------------| +| `/pipeline` | GET | Returns `ok` (plain text) | +| `/baseline11` | GET | Sums query parameter values | +| `/baseline11` | POST | Sums query parameters + request body | +| `/baseline2` | GET | Sums query parameter values (HTTP/2 variant) | +| `/json` | GET | Processes 50-item dataset, serializes JSON | +| `/compression` | GET | Gzip-compressed large JSON response | +| `/db` | GET | SQLite range query with JSON response | +| `/async-db` | GET | PostgreSQL async queries | +| `/upload` | POST | Receives body, returns byte count | +| `/static/{filename}` | GET | Serves preloaded static files with MIME types | + +## Architecture + +- **Zero-allocation routing** — FrozenDictionary + Span based, no string allocations +- **Custom HTTP parser** — RFC 9110/9112 compliant, SequenceReader based +- **HTTP/2 support** — ALPN negotiation, HPACK compression, binary framing +- **System.IO.Pipelines** — High-performance I/O with PipeReader/PipeWriter +- **Compiled endpoint invokers** — Expression trees eliminate per-request reflection +- **Pre-computed responses** — JSON and static files cached at startup +- **HTTP/1.1 on port 8080**, HTTP/1+2 on port 8443 with TLS diff --git a/frameworks/effinitive/app/Models.cs b/frameworks/effinitive/app/Models.cs new file mode 100644 index 00000000..1b7eeb59 --- /dev/null +++ b/frameworks/effinitive/app/Models.cs @@ -0,0 +1,57 @@ +using System.Text.Json.Serialization; + +public sealed record ResponseDto(IReadOnlyList Items, int Count); + +public sealed class DbResponseItemDto +{ + public int Id { get; set; } + public string Name { get; set; } = ""; + public string Category { get; set; } = ""; + public double Price { get; set; } + public int Quantity { get; set; } + public bool Active { get; set; } + public List Tags { get; set; } = []; + public RatingInfo Rating { get; set; } = new(); +} + +sealed class DatasetItem +{ + public int Id { get; set; } + public string Name { get; set; } = ""; + public string Category { get; set; } = ""; + public double Price { get; set; } + public int Quantity { get; set; } + public bool Active { get; set; } + public List Tags { get; set; } = []; + public RatingInfo Rating { get; set; } = new(); +} + +public sealed class ProcessedItem +{ + public int Id { get; set; } + public string Name { get; set; } = ""; + public string Category { get; set; } = ""; + public double Price { get; set; } + public int Quantity { get; set; } + public bool Active { get; set; } + public List Tags { get; set; } = []; + public RatingInfo Rating { get; set; } = new(); + public double Total { get; set; } +} + +public sealed class RatingInfo +{ + public double Score { get; set; } + public int Count { get; set; } +} + + +[JsonSerializable(typeof(ResponseDto))] +[JsonSerializable(typeof(ResponseDto))] +[JsonSerializable(typeof(DbResponseItemDto))] +[JsonSerializable(typeof(ProcessedItem))] +[JsonSerializable(typeof(RatingInfo))] +[JsonSerializable(typeof(List))] +[JsonSerializable(typeof(List))] +[JsonSourceGenerationOptions(PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase)] +partial class AppJsonContext : JsonSerializerContext { } diff --git a/frameworks/effinitive/app/Program.cs b/frameworks/effinitive/app/Program.cs new file mode 100644 index 00000000..ac6c482d --- /dev/null +++ b/frameworks/effinitive/app/Program.cs @@ -0,0 +1,59 @@ +using System.Text.Json; +using EffinitiveFramework.Core; +using EffinitiveFramework.Core.WebSocket; + +var certPath = Environment.GetEnvironmentVariable("TLS_CERT") ?? "/certs/server.crt"; +var keyPath = Environment.GetEnvironmentVariable("TLS_KEY") ?? "/certs/server.key"; +var hasCert = File.Exists(certPath) && File.Exists(keyPath); + +// Static files: Docker mounts at /data/static, fallback to local wwwroot/static +var staticRoot = Directory.Exists("/data/static") ? "/data/static" : Path.Combine(AppContext.BaseDirectory, "wwwroot", "static"); + +var builder = EffinitiveApp.Create() + .UsePort(8080) + .UseResponseCompression() + .UseStaticFiles(staticRoot, "/static") + .MapWebSocket("/ws", async (ws, ct) => + { + while (ws.IsOpen) + { + var msg = await ws.ReceiveAsync(ct); + if (msg == null) break; + await ws.SendAsync(msg.Value.Data, msg.Value.Type, ct); + } + }) + .Configure(options => + { + options.EnableDebugLogging = false; + options.MaxConcurrentConnections = 65536; + options.HeaderTimeout = TimeSpan.FromSeconds(30); + options.RequestTimeout = TimeSpan.FromSeconds(60); + options.IdleTimeout = TimeSpan.FromSeconds(120); + options.MaxRequestBodySize = 30 * 1024 * 1024; + options.JsonOptions = new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + PropertyNameCaseInsensitive = true, + WriteIndented = false + }; + }); + +if (hasCert) +{ + builder + .UseHttpsPort(8443) + .ConfigureTls(opts => + { + opts.CertificatePath = certPath; + opts.KeyPath = keyPath; + }); +} + +var app = builder + .MapEndpoints() + .Build(); + +var cts = new CancellationTokenSource(); +Console.CancelKeyPress += (_, e) => { e.Cancel = true; cts.Cancel(); }; + +await app.RunAsync(cts.Token); diff --git a/frameworks/effinitive/app/Tests/AsyncDatabase.cs b/frameworks/effinitive/app/Tests/AsyncDatabase.cs new file mode 100644 index 00000000..9a73dfbe --- /dev/null +++ b/frameworks/effinitive/app/Tests/AsyncDatabase.cs @@ -0,0 +1,69 @@ +using System.Text.Json; +using EffinitiveFramework.Core; +using EffinitiveFramework.Core.Http; +using Npgsql; + +namespace effinitive.Tests; + +public class AsyncDatabaseEndpoint : NoRequestAsyncEndpointBase> +{ + protected override string Method => "GET"; + protected override string Route => "/async-db"; + + private static readonly NpgsqlDataSource? PgDataSource = OpenPgPool(); + + private static NpgsqlDataSource? OpenPgPool() + { + var dbUrl = Environment.GetEnvironmentVariable("DATABASE_URL"); + if (string.IsNullOrEmpty(dbUrl)) return null; + try + { + var uri = new Uri(dbUrl); + var userInfo = uri.UserInfo.Split(':'); + var connStr = $"Host={uri.Host};Port={uri.Port};Username={userInfo[0]};Password={userInfo[1]};Database={uri.AbsolutePath.TrimStart('/')};Maximum Pool Size=256;Minimum Pool Size=64;Multiplexing=true;No Reset On Close=true;Max Auto Prepare=4;Auto Prepare Min Usages=1"; + var builder = new NpgsqlDataSourceBuilder(connStr); + return builder.Build(); + } + catch { return null; } + } + + public override async Task> HandleAsync(CancellationToken ct) + { + if (PgDataSource == null) + { + throw new InvalidOperationException("Database not available: DATABASE_URL is not configured or invalid."); + } + + var query = HttpContext?.Query ?? QueryCollection.Empty; + double min = query.GetDouble("min", 10); + double max = query.GetDouble("max", 50); + int limit = query.GetInt("limit", 50); + + await using var cmd = PgDataSource.CreateCommand( + "SELECT id, name, category, price, quantity, active, tags, rating_score, rating_count FROM items WHERE price BETWEEN $1 AND $2 LIMIT $3"); + + cmd.Parameters.AddWithValue(min); + cmd.Parameters.AddWithValue(max); + cmd.Parameters.AddWithValue(limit); + + await using var reader = await cmd.ExecuteReaderAsync(ct); + var items = new List(limit); + + while (await reader.ReadAsync(ct)) + { + items.Add(new DbResponseItemDto + { + Id = reader.GetInt32(0), + Name = reader.GetString(1), + Category = reader.GetString(2), + Price = reader.GetDouble(3), + Quantity = reader.GetInt32(4), + Active = reader.GetBoolean(5), + Tags = JsonSerializer.Deserialize(reader.GetString(6), AppJsonContext.Default.ListString)!, + Rating = new RatingInfo { Score = reader.GetDouble(7), Count = reader.GetInt32(8) } + }); + } + + return new ResponseDto(items, items.Count); + } +} diff --git a/frameworks/effinitive/app/Tests/Baseline.cs b/frameworks/effinitive/app/Tests/Baseline.cs new file mode 100644 index 00000000..a181d055 --- /dev/null +++ b/frameworks/effinitive/app/Tests/Baseline.cs @@ -0,0 +1,66 @@ +using System.Text; +using EffinitiveFramework.Core; +using EffinitiveFramework.Core.Http; + +namespace effinitive.Tests; + +public class PipelineEndpoint : NoRequestEndpointBase +{ + protected override string Method => "GET"; + protected override string Route => "/pipeline"; + protected override string ContentType => "text/plain"; + + public override ValueTask HandleAsync(CancellationToken ct) + => ValueTask.FromResult("ok"); +} + +public class BaselineGetEndpoint : NoRequestEndpointBase +{ + protected override string Method => "GET"; + protected override string Route => "/baseline11"; + protected override string ContentType => "text/plain"; + + public override ValueTask HandleAsync(CancellationToken ct) + { + var query = HttpContext?.Query ?? QueryCollection.Empty; + int a = query.GetInt("a"); + int b = query.GetInt("b"); + return ValueTask.FromResult((a + b).ToString()); + } +} + +public class BaselinePostEndpoint : NoRequestEndpointBase +{ + protected override string Method => "POST"; + protected override string Route => "/baseline11"; + protected override string ContentType => "text/plain"; + + public override ValueTask HandleAsync(CancellationToken ct) + { + var query = HttpContext?.Query ?? QueryCollection.Empty; + int a = query.GetInt("a"); + int b = query.GetInt("b"); + int bodyVal = 0; + if (HttpContext?.Body.Length > 0) + { + var bodyStr = Encoding.UTF8.GetString(HttpContext.Body.Span).Trim(); + int.TryParse(bodyStr, out bodyVal); + } + return ValueTask.FromResult((a + b + bodyVal).ToString()); + } +} + +public class Baseline2GetEndpoint : NoRequestEndpointBase +{ + protected override string Method => "GET"; + protected override string Route => "/baseline2"; + protected override string ContentType => "text/plain"; + + public override ValueTask HandleAsync(CancellationToken ct) + { + var query = HttpContext?.Query ?? QueryCollection.Empty; + int a = query.GetInt("a"); + int b = query.GetInt("b"); + return ValueTask.FromResult((a + b).ToString()); + } +} diff --git a/frameworks/effinitive/app/Tests/Compression.cs b/frameworks/effinitive/app/Tests/Compression.cs new file mode 100644 index 00000000..b265d93c --- /dev/null +++ b/frameworks/effinitive/app/Tests/Compression.cs @@ -0,0 +1,50 @@ +using System.Text.Json; +using EffinitiveFramework.Core; + +namespace effinitive.Tests; + +public class CompressionEndpoint : NoRequestEndpointBase +{ + protected override string Method => "GET"; + protected override string Route => "/compression"; + + // Pre-serialize JSON at startup, same as ASP.NET's TypedResults.Bytes() approach. + // The compression middleware handles gzip per-request. + private static readonly byte[] PreSerializedJson = BuildJson(); + + private static byte[] BuildJson() + { + var path = "/data/dataset-large.json"; + if (!File.Exists(path)) + { + throw new FileNotFoundException($"Required dataset file not found: {path}", path); + } + + var fileBytes = File.ReadAllBytes(path); + var items = JsonSerializer.Deserialize(fileBytes, AppJsonContext.Default.ListDatasetItem); + if (items == null) + { + throw new InvalidOperationException("Failed to deserialize /data/dataset-large.json"); + } + + var processed = new List(items.Count); + foreach (var d in items) + { + processed.Add(new ProcessedItem + { + Id = d.Id, Name = d.Name, Category = d.Category, + Price = d.Price, Quantity = d.Quantity, Active = d.Active, + Tags = d.Tags, Rating = d.Rating, + Total = Math.Round(d.Price * d.Quantity, 2) + }); + } + + var dto = new ResponseDto(processed, processed.Count); + return JsonSerializer.SerializeToUtf8Bytes(dto, AppJsonContext.Default.ResponseDtoProcessedItem); + } + + public override ValueTask HandleAsync(CancellationToken ct) + { + return ValueTask.FromResult(PreSerializedJson); + } +} diff --git a/frameworks/effinitive/app/Tests/Database.cs b/frameworks/effinitive/app/Tests/Database.cs new file mode 100644 index 00000000..d53818e6 --- /dev/null +++ b/frameworks/effinitive/app/Tests/Database.cs @@ -0,0 +1,96 @@ +using System.Collections.Concurrent; +using System.Text.Json; +using EffinitiveFramework.Core; +using EffinitiveFramework.Core.Http; +using Microsoft.Data.Sqlite; + +namespace effinitive.Tests; + +sealed class SqlitePool +{ + private readonly ConcurrentBag _connections = new(); + + public SqlitePool(string connectionString, int size) + { + for (int i = 0; i < size; i++) + { + var conn = new SqliteConnection(connectionString); + conn.Open(); + using var pragma = conn.CreateCommand(); + pragma.CommandText = "PRAGMA mmap_size=268435456"; + pragma.ExecuteNonQuery(); + _connections.Add(conn); + } + } + + public SqliteConnection Rent() + { + SqliteConnection? conn; + var spin = new SpinWait(); + while (!_connections.TryTake(out conn)) + spin.SpinOnce(); + return conn; + } + + public void Return(SqliteConnection conn) => _connections.Add(conn); +} + +public class DatabaseEndpoint : NoRequestEndpointBase> +{ + protected override string Method => "GET"; + protected override string Route => "/db"; + + private static readonly SqlitePool? DbPool = OpenPool(); + + private static SqlitePool? OpenPool() + { + var dbPath = "/data/benchmark.db"; + if (!File.Exists(dbPath)) return null; + return new SqlitePool($"Data Source={dbPath};Mode=ReadOnly", Environment.ProcessorCount); + } + + public override ValueTask> HandleAsync(CancellationToken ct) + { + if (DbPool == null) + { + throw new InvalidOperationException("Database not available: /data/benchmark.db was not found."); + } + + var query = HttpContext?.Query ?? QueryCollection.Empty; + double min = query.GetDouble("min", 10); + double max = query.GetDouble("max", 50); + + var conn = DbPool.Rent(); + try + { + using var cmd = conn.CreateCommand(); + cmd.CommandText = "SELECT id, name, category, price, quantity, active, tags, rating_score, rating_count FROM items WHERE price BETWEEN @min AND @max LIMIT 50"; + cmd.Parameters.AddWithValue("@min", min); + cmd.Parameters.AddWithValue("@max", max); + + using var reader = cmd.ExecuteReader(); + var items = new List(50); + + while (reader.Read()) + { + items.Add(new DbResponseItemDto + { + Id = reader.GetInt32(0), + Name = reader.GetString(1), + Category = reader.GetString(2), + Price = reader.GetDouble(3), + Quantity = reader.GetInt32(4), + Active = reader.GetInt32(5) == 1, + Tags = JsonSerializer.Deserialize(reader.GetString(6), AppJsonContext.Default.ListString)!, + Rating = new RatingInfo { Score = reader.GetDouble(7), Count = reader.GetInt32(8) } + }); + } + + return ValueTask.FromResult(new ResponseDto(items, items.Count)); + } + finally + { + DbPool.Return(conn); + } + } +} diff --git a/frameworks/effinitive/app/Tests/Json.cs b/frameworks/effinitive/app/Tests/Json.cs new file mode 100644 index 00000000..3fad3323 --- /dev/null +++ b/frameworks/effinitive/app/Tests/Json.cs @@ -0,0 +1,49 @@ +using System.Text.Json; +using EffinitiveFramework.Core; +using EffinitiveFramework.Core.Http; + +namespace effinitive.Tests; + +public class JsonEndpoint : NoRequestEndpointBase> +{ + protected override string Method => "GET"; + protected override string Route => "/json/{count}"; + + private static readonly DatasetItem[] AllItems = LoadItems(); + + private static DatasetItem[] LoadItems() + { + var path = Environment.GetEnvironmentVariable("DATASET_PATH") ?? "/data/dataset.json"; + if (!File.Exists(path)) + throw new FileNotFoundException($"Required dataset file not found: {path}", path); + + var fileBytes = File.ReadAllBytes(path); + var items = JsonSerializer.Deserialize(fileBytes, AppJsonContext.Default.ListDatasetItem); + if (items == null) + throw new InvalidOperationException($"Failed to deserialize dataset file: {path}"); + return [.. items]; + } + + public override ValueTask> HandleAsync(CancellationToken ct) + { + var query = HttpContext?.Query ?? QueryCollection.Empty; + int count = int.TryParse(HttpContext?.RouteValues?["count"]?.ToString(), out var c) ? c : AllItems.Length; + double m = query.GetDouble("m", 1.0); + + int take = Math.Min(count, AllItems.Length); + var processed = new ProcessedItem[take]; + for (int i = 0; i < take; i++) + { + var d = AllItems[i]; + processed[i] = new ProcessedItem + { + Id = d.Id, Name = d.Name, Category = d.Category, + Price = d.Price, Quantity = d.Quantity, Active = d.Active, + Tags = d.Tags, Rating = d.Rating, + Total = Math.Round(d.Price * d.Quantity * m, 2) + }; + } + + return ValueTask.FromResult(new ResponseDto(processed, take)); + } +} diff --git a/frameworks/effinitive/app/Tests/Upload.cs b/frameworks/effinitive/app/Tests/Upload.cs new file mode 100644 index 00000000..71b844dc --- /dev/null +++ b/frameworks/effinitive/app/Tests/Upload.cs @@ -0,0 +1,38 @@ +using System.Buffers; +using EffinitiveFramework.Core; +using EffinitiveFramework.Core.Http; + +namespace effinitive.Tests; + +public class UploadEndpoint : NoRequestEndpointBase +{ + protected override string Method => "POST"; + protected override string Route => "/upload"; + protected override string ContentType => "text/plain"; + + public override async ValueTask HandleAsync(CancellationToken ct) + { + long size = 0; + + if (HttpContext?.BodyDeferred == true && HttpContext.BodyStream != null) + { + var buffer = ArrayPool.Shared.Rent(65536); + try + { + int read; + while ((read = await HttpContext.BodyStream.ReadAsync(buffer.AsMemory(0, 65536), ct)) > 0) + size += read; + } + finally + { + ArrayPool.Shared.Return(buffer); + } + } + else + { + size = HttpContext?.Body.Length ?? 0; + } + + return size.ToString(); + } +} diff --git a/frameworks/effinitive/app/effinitive-arena.csproj b/frameworks/effinitive/app/effinitive-arena.csproj new file mode 100644 index 00000000..91d77a27 --- /dev/null +++ b/frameworks/effinitive/app/effinitive-arena.csproj @@ -0,0 +1,19 @@ + + + + Exe + effinitive-arena + net10.0 + enable + enable + true + true + + + + + + + + + diff --git a/frameworks/effinitive/build.sh b/frameworks/effinitive/build.sh new file mode 100644 index 00000000..fce0e04c --- /dev/null +++ b/frameworks/effinitive/build.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +docker build --no-cache -t httparena-effinitive -f "$SCRIPT_DIR/Dockerfile" "$SCRIPT_DIR/app" diff --git a/frameworks/effinitive/meta.json b/frameworks/effinitive/meta.json new file mode 100644 index 00000000..7e676608 --- /dev/null +++ b/frameworks/effinitive/meta.json @@ -0,0 +1,32 @@ +{ + "display_name": "effinitive", + "language": "C#", + "type": "framework", + "engine": "effinitive", + "description": "Ultra-high-performance custom HTTP server for .NET 10 — built from scratch for maximum speed.", + "repo": "https://github.com/HBartosch/Effinitive", + "enabled": true, + "tests": [ + "baseline", + "pipelined", + "limited-conn", + "json", + "upload", + "compression", + "noisy", + "assets-4", + "assets-16", + "static", + "tcp-frag", + "sync-db", + "baseline-h2", + "static-h2", + "echo-ws", + "echo-ws-pipeline", + "baseline-h3", + "static-h3" + ], + "maintainers": [ + "HBartosch" + ] +} From 1ca5a6fa14b9200be2331f18c70cc76c3cbcb99a Mon Sep 17 00:00:00 2001 From: HBartosch Date: Wed, 20 May 2026 14:07:05 +0200 Subject: [PATCH 2/6] Update README.md: refine build instructions and enhance endpoint descriptions --- frameworks/effinitive/README.md | 34 +++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/frameworks/effinitive/README.md b/frameworks/effinitive/README.md index 567fe73c..bd6a5a85 100644 --- a/frameworks/effinitive/README.md +++ b/frameworks/effinitive/README.md @@ -5,31 +5,33 @@ Ultra-high-performance custom HTTP server for .NET 10 — built from scratch for ## Stack - **Language:** C# / .NET 10 -- **Framework:** Effinitive (custom, no Kestrel) -- **Engine:** Custom TCP server with System.IO.Pipelines -- **Build:** Self-contained single-file publish +- **Framework:** Effinitive +- **Engine:** Effinitive +- **Build:** Framework-dependent publish, `mcr.microsoft.com/dotnet/runtime:10.0` runtime with `libmsquic` installed for HTTP/3 ## Endpoints | Endpoint | Method | Description | -|----------|--------|-------------| +|---|---|---| | `/pipeline` | GET | Returns `ok` (plain text) | | `/baseline11` | GET | Sums query parameter values | | `/baseline11` | POST | Sums query parameters + request body | | `/baseline2` | GET | Sums query parameter values (HTTP/2 variant) | -| `/json` | GET | Processes 50-item dataset, serializes JSON | +| `/json/{count}` | GET | Returns `count` items from the preloaded dataset | | `/compression` | GET | Gzip-compressed large JSON response | | `/db` | GET | SQLite range query with JSON response | -| `/async-db` | GET | PostgreSQL async queries | -| `/upload` | POST | Receives body, returns byte count | -| `/static/{filename}` | GET | Serves preloaded static files with MIME types | +| `/async-db` | GET | PostgreSQL async range query | +| `/upload` | POST | Streams request body, returns byte count | +| `/static/*` | GET | Serves files from `/data/static` with MIME types and ETag support | +| `/ws` | GET | WebSocket echo — reflects text, binary, and ping/pong frames | -## Architecture +## Notes -- **Zero-allocation routing** — FrozenDictionary + Span based, no string allocations -- **Custom HTTP parser** — RFC 9110/9112 compliant, SequenceReader based -- **HTTP/2 support** — ALPN negotiation, HPACK compression, binary framing -- **System.IO.Pipelines** — High-performance I/O with PipeReader/PipeWriter -- **Compiled endpoint invokers** — Expression trees eliminate per-request reflection -- **Pre-computed responses** — JSON and static files cached at startup -- **HTTP/1.1 on port 8080**, HTTP/1+2 on port 8443 with TLS +- HTTP/1.1 on port 8080, HTTP/1+2+3 on port 8443 (TCP **and** UDP for QUIC), h1+TLS on port 8081 +- HTTP/3 via MsQuic (`libmsquic` installed in the runtime image); ALPN negotiation handles h2/h3 upgrade +- TLS certs loaded from `$TLS_CERT` / `$TLS_KEY` (default `/certs/server.crt` + `/certs/server.key`) +- Static files served from the `/data/static` volume mount at runtime; no files baked into the image +- JSON responses use source-generated `JsonSerializerContext` (`AppJsonContext`) so the hot path avoids reflection +- Postgres pooled via `Npgsql.NpgsqlDataSource` with multiplexing, built once at startup from `DATABASE_URL` +- WebSocket endpoint at `/ws` handles text, binary, and ping/pong frames; non-upgrade requests to `/ws` return 400 +- Source split: `Program.cs` (startup + routing), `Models.cs` (DTOs + JSON context), `Tests/` (one file per test profile) From 18f577177aa1933f8e571dbb81bf6c993834b793 Mon Sep 17 00:00:00 2001 From: HBartosch <162106117+HBartosch@users.noreply.github.com> Date: Wed, 20 May 2026 15:21:04 +0200 Subject: [PATCH 3/6] Change type from 'framework' to 'production' --- frameworks/effinitive/meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/effinitive/meta.json b/frameworks/effinitive/meta.json index 7e676608..563d99f0 100644 --- a/frameworks/effinitive/meta.json +++ b/frameworks/effinitive/meta.json @@ -1,7 +1,7 @@ { "display_name": "effinitive", "language": "C#", - "type": "framework", + "type": "production", "engine": "effinitive", "description": "Ultra-high-performance custom HTTP server for .NET 10 — built from scratch for maximum speed.", "repo": "https://github.com/HBartosch/Effinitive", From 1f430ab263fcd2612b88f6ff928cb18e23817dc8 Mon Sep 17 00:00:00 2001 From: HenryBartosch Date: Wed, 20 May 2026 15:51:21 +0200 Subject: [PATCH 4/6] Refactor Dockerfile and build script for improved structure and update package source --- frameworks/effinitive/Dockerfile | 5 ++--- frameworks/effinitive/build.sh | 2 +- frameworks/effinitive/meta.json | 9 +++------ 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/frameworks/effinitive/Dockerfile b/frameworks/effinitive/Dockerfile index 87b575ee..be7c198a 100644 --- a/frameworks/effinitive/Dockerfile +++ b/frameworks/effinitive/Dockerfile @@ -1,12 +1,11 @@ FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build WORKDIR /src -COPY . app/ -WORKDIR /src/app +COPY app/ . RUN dotnet publish -c Release -o /out FROM mcr.microsoft.com/dotnet/runtime:10.0 -ADD https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb /packages-microsoft-prod.deb +ADD https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb /packages-microsoft-prod.deb RUN dpkg -i /packages-microsoft-prod.deb && rm /packages-microsoft-prod.deb \ && apt-get update \ diff --git a/frameworks/effinitive/build.sh b/frameworks/effinitive/build.sh index fce0e04c..8013ef36 100644 --- a/frameworks/effinitive/build.sh +++ b/frameworks/effinitive/build.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -docker build --no-cache -t httparena-effinitive -f "$SCRIPT_DIR/Dockerfile" "$SCRIPT_DIR/app" +docker build --no-cache -t httparena-effinitive -f "$SCRIPT_DIR/Dockerfile" "$SCRIPT_DIR" diff --git a/frameworks/effinitive/meta.json b/frameworks/effinitive/meta.json index 563d99f0..47581a7d 100644 --- a/frameworks/effinitive/meta.json +++ b/frameworks/effinitive/meta.json @@ -12,13 +12,10 @@ "limited-conn", "json", "upload", - "compression", - "noisy", - "assets-4", - "assets-16", + "api-4", + "api-16", "static", - "tcp-frag", - "sync-db", + "async-db", "baseline-h2", "static-h2", "echo-ws", From 9a0fc740ed7610080e3e3dcd14e68fba50e36b81 Mon Sep 17 00:00:00 2001 From: HenryBartosch Date: Wed, 20 May 2026 15:53:17 +0200 Subject: [PATCH 5/6] Update README.md: remove redundant port information for HTTP/1.1 --- frameworks/effinitive/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/effinitive/README.md b/frameworks/effinitive/README.md index bd6a5a85..c71289f8 100644 --- a/frameworks/effinitive/README.md +++ b/frameworks/effinitive/README.md @@ -27,7 +27,7 @@ Ultra-high-performance custom HTTP server for .NET 10 — built from scratch for ## Notes -- HTTP/1.1 on port 8080, HTTP/1+2+3 on port 8443 (TCP **and** UDP for QUIC), h1+TLS on port 8081 +- HTTP/1.1 on port 8080, HTTP/1+2+3 on port 8443 (TCP **and** UDP for QUIC) - HTTP/3 via MsQuic (`libmsquic` installed in the runtime image); ALPN negotiation handles h2/h3 upgrade - TLS certs loaded from `$TLS_CERT` / `$TLS_KEY` (default `/certs/server.crt` + `/certs/server.key`) - Static files served from the `/data/static` volume mount at runtime; no files baked into the image From 3163d1a1d49d177590a2090c15707955284e8189 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 20 May 2026 21:39:48 +0000 Subject: [PATCH 6/6] Benchmark results: effinitive --- site/data/api-16-1024.json | 26 +++++++++++++++++++ site/data/api-4-256.json | 26 +++++++++++++++++++ site/data/async-db-1024.json | 20 ++++++++++++++ site/data/baseline-4096.json | 20 ++++++++++++++ site/data/baseline-512.json | 20 ++++++++++++++ site/data/baseline-h2-1024.json | 19 ++++++++++++++ site/data/baseline-h2-256.json | 19 ++++++++++++++ site/data/baseline-h3-64.json | 19 ++++++++++++++ site/data/echo-ws-16384.json | 19 ++++++++++++++ site/data/echo-ws-4096.json | 19 ++++++++++++++ site/data/echo-ws-512.json | 19 ++++++++++++++ site/data/echo-ws-pipeline-16384.json | 19 ++++++++++++++ site/data/echo-ws-pipeline-4096.json | 19 ++++++++++++++ site/data/echo-ws-pipeline-512.json | 19 ++++++++++++++ site/data/frameworks.json | 7 +++++ site/data/json-4096.json | 20 ++++++++++++++ site/data/limited-conn-4096.json | 20 ++++++++++++++ site/data/limited-conn-512.json | 20 ++++++++++++++ site/data/pipelined-4096.json | 19 ++++++++++++++ site/data/pipelined-512.json | 19 ++++++++++++++ site/data/static-1024.json | 19 ++++++++++++++ site/data/static-4096.json | 19 ++++++++++++++ site/data/static-6800.json | 19 ++++++++++++++ site/data/static-h2-1024.json | 19 ++++++++++++++ site/data/static-h2-256.json | 19 ++++++++++++++ site/data/static-h3-64.json | 19 ++++++++++++++ site/data/upload-256.json | 20 ++++++++++++++ site/data/upload-32.json | 20 ++++++++++++++ site/static/logs/api-16/1024/effinitive.log | 15 +++++++++++ site/static/logs/api-4/256/effinitive.log | 15 +++++++++++ site/static/logs/async-db/1024/effinitive.log | 15 +++++++++++ .../logs/baseline-h2/1024/effinitive.log | 13 ++++++++++ .../logs/baseline-h2/256/effinitive.log | 13 ++++++++++ .../static/logs/baseline-h3/64/effinitive.log | 13 ++++++++++ site/static/logs/baseline/4096/effinitive.log | 13 ++++++++++ site/static/logs/baseline/512/effinitive.log | 13 ++++++++++ .../echo-ws-pipeline/16384/effinitive.log | 13 ++++++++++ .../logs/echo-ws-pipeline/4096/effinitive.log | 13 ++++++++++ .../logs/echo-ws-pipeline/512/effinitive.log | 13 ++++++++++ site/static/logs/echo-ws/16384/effinitive.log | 13 ++++++++++ site/static/logs/echo-ws/4096/effinitive.log | 13 ++++++++++ site/static/logs/echo-ws/512/effinitive.log | 13 ++++++++++ site/static/logs/json/4096/effinitive.log | 13 ++++++++++ .../logs/limited-conn/4096/effinitive.log | 13 ++++++++++ .../logs/limited-conn/512/effinitive.log | 13 ++++++++++ .../static/logs/pipelined/4096/effinitive.log | 13 ++++++++++ site/static/logs/pipelined/512/effinitive.log | 13 ++++++++++ .../static/logs/static-h2/1024/effinitive.log | 13 ++++++++++ site/static/logs/static-h2/256/effinitive.log | 13 ++++++++++ site/static/logs/static-h3/64/effinitive.log | 13 ++++++++++ site/static/logs/static/1024/effinitive.log | 13 ++++++++++ site/static/logs/static/4096/effinitive.log | 13 ++++++++++ site/static/logs/static/6800/effinitive.log | 13 ++++++++++ site/static/logs/upload/256/effinitive.log | 13 ++++++++++ site/static/logs/upload/32/effinitive.log | 13 ++++++++++ 55 files changed, 899 insertions(+) create mode 100644 site/static/logs/api-16/1024/effinitive.log create mode 100644 site/static/logs/api-4/256/effinitive.log create mode 100644 site/static/logs/async-db/1024/effinitive.log create mode 100644 site/static/logs/baseline-h2/1024/effinitive.log create mode 100644 site/static/logs/baseline-h2/256/effinitive.log create mode 100644 site/static/logs/baseline-h3/64/effinitive.log create mode 100644 site/static/logs/baseline/4096/effinitive.log create mode 100644 site/static/logs/baseline/512/effinitive.log create mode 100644 site/static/logs/echo-ws-pipeline/16384/effinitive.log create mode 100644 site/static/logs/echo-ws-pipeline/4096/effinitive.log create mode 100644 site/static/logs/echo-ws-pipeline/512/effinitive.log create mode 100644 site/static/logs/echo-ws/16384/effinitive.log create mode 100644 site/static/logs/echo-ws/4096/effinitive.log create mode 100644 site/static/logs/echo-ws/512/effinitive.log create mode 100644 site/static/logs/json/4096/effinitive.log create mode 100644 site/static/logs/limited-conn/4096/effinitive.log create mode 100644 site/static/logs/limited-conn/512/effinitive.log create mode 100644 site/static/logs/pipelined/4096/effinitive.log create mode 100644 site/static/logs/pipelined/512/effinitive.log create mode 100644 site/static/logs/static-h2/1024/effinitive.log create mode 100644 site/static/logs/static-h2/256/effinitive.log create mode 100644 site/static/logs/static-h3/64/effinitive.log create mode 100644 site/static/logs/static/1024/effinitive.log create mode 100644 site/static/logs/static/4096/effinitive.log create mode 100644 site/static/logs/static/6800/effinitive.log create mode 100644 site/static/logs/upload/256/effinitive.log create mode 100644 site/static/logs/upload/32/effinitive.log diff --git a/site/data/api-16-1024.json b/site/data/api-16-1024.json index 30ffb463..c1a6acca 100644 --- a/site/data/api-16-1024.json +++ b/site/data/api-16-1024.json @@ -204,6 +204,32 @@ "tpl_static": 0, "tpl_async_db": 95921 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 78773, + "avg_latency": "11.18ms", + "p99_latency": "64.20ms", + "cpu": "1545.2%", + "memory": "314MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "404.54MB/s", + "input_bw": "4.43MB/s", + "reconnects": 236210, + "status_2xx": 1181609, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0, + "tpl_baseline": 443394, + "tpl_json": 442944, + "tpl_db": 0, + "tpl_upload": 0, + "tpl_static": 0, + "tpl_async_db": 295270 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/api-4-256.json b/site/data/api-4-256.json index d1aacd69..2d30f886 100644 --- a/site/data/api-4-256.json +++ b/site/data/api-4-256.json @@ -204,6 +204,32 @@ "tpl_static": 0, "tpl_async_db": 35789 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 46030, + "avg_latency": "3.81ms", + "p99_latency": "20.40ms", + "cpu": "394.3%", + "memory": "280MiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "236.42MB/s", + "input_bw": "2.59MB/s", + "reconnects": 138067, + "status_2xx": 690460, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0, + "tpl_baseline": 259043, + "tpl_json": 259012, + "tpl_db": 0, + "tpl_upload": 0, + "tpl_static": 0, + "tpl_async_db": 172404 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/async-db-1024.json b/site/data/async-db-1024.json index fe0f3a34..5f7b86cf 100644 --- a/site/data/async-db-1024.json +++ b/site/data/async-db-1024.json @@ -156,6 +156,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 166493, + "avg_latency": "5.59ms", + "p99_latency": "13.50ms", + "cpu": "3522.6%", + "memory": "568MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "653.71MB/s", + "input_bw": "11.11MB/s", + "reconnects": 66484, + "status_2xx": 1664936, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/baseline-4096.json b/site/data/baseline-4096.json index be0f4e73..44430d37 100644 --- a/site/data/baseline-4096.json +++ b/site/data/baseline-4096.json @@ -234,6 +234,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 1435736, + "avg_latency": "2.82ms", + "p99_latency": "6.43ms", + "cpu": "5790.0%", + "memory": "1.6GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "233.63MB/s", + "input_bw": "110.91MB/s", + "reconnects": 0, + "status_2xx": 7178680, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/baseline-512.json b/site/data/baseline-512.json index a9dfe151..b573f77a 100644 --- a/site/data/baseline-512.json +++ b/site/data/baseline-512.json @@ -234,6 +234,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 1385487, + "avg_latency": "333us", + "p99_latency": "1.50ms", + "cpu": "5618.1%", + "memory": "431MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "223.86MB/s", + "input_bw": "107.03MB/s", + "reconnects": 0, + "status_2xx": 6927437, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/baseline-h2-1024.json b/site/data/baseline-h2-1024.json index b56ec46a..64bc7916 100644 --- a/site/data/baseline-h2-1024.json +++ b/site/data/baseline-h2-1024.json @@ -96,6 +96,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 2021859, + "avg_latency": "27.45ms", + "p99_latency": "27.45ms", + "cpu": "6136.2%", + "memory": "12.9GiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "64.28MB/s", + "reconnects": 0, + "status_2xx": 10210392, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "frankenphp-trueasync", "language": "PHP", diff --git a/site/data/baseline-h2-256.json b/site/data/baseline-h2-256.json index 10c4ab27..f08f64e7 100644 --- a/site/data/baseline-h2-256.json +++ b/site/data/baseline-h2-256.json @@ -96,6 +96,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 1876072, + "avg_latency": "11.05ms", + "p99_latency": "11.05ms", + "cpu": "6266.4%", + "memory": "2.5GiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "59.40MB/s", + "reconnects": 0, + "status_2xx": 9436643, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "frankenphp-trueasync", "language": "PHP", diff --git a/site/data/baseline-h3-64.json b/site/data/baseline-h3-64.json index 23c54479..13c81be3 100644 --- a/site/data/baseline-h3-64.json +++ b/site/data/baseline-h3-64.json @@ -37,6 +37,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 100377, + "avg_latency": "39.56ms", + "p99_latency": "125.07ms", + "cpu": "1950.7%", + "memory": "569MiB", + "connections": 64, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "1.15MB/s", + "reconnects": 0, + "status_2xx": 502893, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "frankenphp-trueasync", "language": "PHP", diff --git a/site/data/echo-ws-16384.json b/site/data/echo-ws-16384.json index 18901f96..1d0eb74f 100644 --- a/site/data/echo-ws-16384.json +++ b/site/data/echo-ws-16384.json @@ -95,6 +95,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 404118, + "avg_latency": "11.53ms", + "p99_latency": "52.80ms", + "cpu": "2517.1%", + "memory": "3.2GiB", + "connections": 16384, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "2.90MB/s", + "reconnects": 0, + "status_2xx": 2020592, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "fleck", "language": "C#", diff --git a/site/data/echo-ws-4096.json b/site/data/echo-ws-4096.json index 9cd8a76f..4fc4ed49 100644 --- a/site/data/echo-ws-4096.json +++ b/site/data/echo-ws-4096.json @@ -95,6 +95,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 383556, + "avg_latency": "7.70ms", + "p99_latency": "29.70ms", + "cpu": "2505.8%", + "memory": "1.6GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "2.65MB/s", + "reconnects": 0, + "status_2xx": 1917783, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "fleck", "language": "C#", diff --git a/site/data/echo-ws-512.json b/site/data/echo-ws-512.json index edbc7432..811d3686 100644 --- a/site/data/echo-ws-512.json +++ b/site/data/echo-ws-512.json @@ -95,6 +95,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 414850, + "avg_latency": "1.23ms", + "p99_latency": "15.90ms", + "cpu": "3818.7%", + "memory": "510MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "2.77MB/s", + "reconnects": 0, + "status_2xx": 2074254, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "fleck", "language": "C#", diff --git a/site/data/echo-ws-pipeline-16384.json b/site/data/echo-ws-pipeline-16384.json index c25f010c..9a8b61d0 100644 --- a/site/data/echo-ws-pipeline-16384.json +++ b/site/data/echo-ws-pipeline-16384.json @@ -94,6 +94,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 725773, + "avg_latency": "62.28ms", + "p99_latency": "248.60ms", + "cpu": "1418.1%", + "memory": "1.9GiB", + "connections": 16384, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "5.01MB/s", + "reconnects": 0, + "status_2xx": 3628869, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "fleck", "language": "C#", diff --git a/site/data/echo-ws-pipeline-4096.json b/site/data/echo-ws-pipeline-4096.json index 63462f94..f401242b 100644 --- a/site/data/echo-ws-pipeline-4096.json +++ b/site/data/echo-ws-pipeline-4096.json @@ -94,6 +94,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 874276, + "avg_latency": "47.53ms", + "p99_latency": "159.10ms", + "cpu": "1589.9%", + "memory": "1.4GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "5.93MB/s", + "reconnects": 0, + "status_2xx": 4371384, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "fleck", "language": "C#", diff --git a/site/data/echo-ws-pipeline-512.json b/site/data/echo-ws-pipeline-512.json index acd79699..70a64149 100644 --- a/site/data/echo-ws-pipeline-512.json +++ b/site/data/echo-ws-pipeline-512.json @@ -94,6 +94,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 757013, + "avg_latency": "10.70ms", + "p99_latency": "60.30ms", + "cpu": "2405.0%", + "memory": "674MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "5.06MB/s", + "reconnects": 0, + "status_2xx": 3785065, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "fleck", "language": "C#", diff --git a/site/data/frameworks.json b/site/data/frameworks.json index 58ada54f..56404f9e 100644 --- a/site/data/frameworks.json +++ b/site/data/frameworks.json @@ -150,6 +150,13 @@ "type": "production", "engine": "zerg" }, + "effinitive": { + "dir": "effinitive", + "description": "Ultra-high-performance custom HTTP server for .NET 10 \u2014 built from scratch for maximum speed.", + "repo": "https://github.com/HBartosch/Effinitive", + "type": "production", + "engine": "effinitive" + }, "elysia": { "dir": "elysia", "description": "An ergonomic framework for Humans", diff --git a/site/data/json-4096.json b/site/data/json-4096.json index cc318245..41b16da1 100644 --- a/site/data/json-4096.json +++ b/site/data/json-4096.json @@ -196,6 +196,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 376957, + "avg_latency": "10.32ms", + "p99_latency": "265.80ms", + "cpu": "4131.8%", + "memory": "371MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "1.32GB/s", + "input_bw": "17.97MB/s", + "reconnects": 75378, + "status_2xx": 1884786, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/limited-conn-4096.json b/site/data/limited-conn-4096.json index 24a46912..cf9d3290 100644 --- a/site/data/limited-conn-4096.json +++ b/site/data/limited-conn-4096.json @@ -234,6 +234,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 362707, + "avg_latency": "11.18ms", + "p99_latency": "120.70ms", + "cpu": "2667.2%", + "memory": "205MiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "59.13MB/s", + "input_bw": "28.02MB/s", + "reconnects": 181354, + "status_2xx": 1813537, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/limited-conn-512.json b/site/data/limited-conn-512.json index 45afc519..7b112c48 100644 --- a/site/data/limited-conn-512.json +++ b/site/data/limited-conn-512.json @@ -234,6 +234,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 374230, + "avg_latency": "1.36ms", + "p99_latency": "14.90ms", + "cpu": "2714.7%", + "memory": "182MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "61.01MB/s", + "input_bw": "28.91MB/s", + "reconnects": 187115, + "status_2xx": 1871150, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/pipelined-4096.json b/site/data/pipelined-4096.json index 433426e7..d6530e84 100644 --- a/site/data/pipelined-4096.json +++ b/site/data/pipelined-4096.json @@ -210,6 +210,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 5467452, + "avg_latency": "11.94ms", + "p99_latency": "137.80ms", + "cpu": "6208.9%", + "memory": "1.5GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "1.11GB/s", + "reconnects": 0, + "status_2xx": 27337264, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/pipelined-512.json b/site/data/pipelined-512.json index d0ea2ad8..1fa8f722 100644 --- a/site/data/pipelined-512.json +++ b/site/data/pipelined-512.json @@ -210,6 +210,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 4892880, + "avg_latency": "1.68ms", + "p99_latency": "6.67ms", + "cpu": "5568.9%", + "memory": "398MiB", + "connections": 512, + "threads": 64, + "duration": "5s", + "pipeline": 16, + "bandwidth": "1021.60MB/s", + "reconnects": 0, + "status_2xx": 24464400, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/static-1024.json b/site/data/static-1024.json index 154d5186..49dff322 100644 --- a/site/data/static-1024.json +++ b/site/data/static-1024.json @@ -191,6 +191,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 150585, + "avg_latency": "10.33ms", + "p99_latency": "10.33ms", + "cpu": "5198.6%", + "memory": "1.4GiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "8.95GB", + "reconnects": 0, + "status_2xx": 767956, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/static-4096.json b/site/data/static-4096.json index b37b9055..41dc7426 100644 --- a/site/data/static-4096.json +++ b/site/data/static-4096.json @@ -191,6 +191,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 159063, + "avg_latency": "70.85ms", + "p99_latency": "70.85ms", + "cpu": "5312.1%", + "memory": "1.7GiB", + "connections": 4096, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "9.46GB", + "reconnects": 0, + "status_2xx": 811207, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/static-6800.json b/site/data/static-6800.json index b19c0212..6e1be25e 100644 --- a/site/data/static-6800.json +++ b/site/data/static-6800.json @@ -191,6 +191,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 161470, + "avg_latency": "87.88ms", + "p99_latency": "87.88ms", + "cpu": "5396.5%", + "memory": "2.0GiB", + "connections": 6800, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "9.60GB", + "reconnects": 0, + "status_2xx": 823679, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/static-h2-1024.json b/site/data/static-h2-1024.json index e157f356..c2a1ace6 100644 --- a/site/data/static-h2-1024.json +++ b/site/data/static-h2-1024.json @@ -96,6 +96,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 404, + "avg_latency": "396us", + "p99_latency": "396us", + "cpu": "286.7%", + "memory": "327MiB", + "connections": 1024, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "15.49MB/s", + "reconnects": 0, + "status_2xx": 2048, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "frankenphp-trueasync", "language": "PHP", diff --git a/site/data/static-h2-256.json b/site/data/static-h2-256.json index 4b9b932e..623f073d 100644 --- a/site/data/static-h2-256.json +++ b/site/data/static-h2-256.json @@ -96,6 +96,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 101, + "avg_latency": "357us", + "p99_latency": "357us", + "cpu": "87.5%", + "memory": "157MiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "5.19MB/s", + "reconnects": 0, + "status_2xx": 512, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "frankenphp-trueasync", "language": "PHP", diff --git a/site/data/static-h3-64.json b/site/data/static-h3-64.json index c1e2f25d..fdfae645 100644 --- a/site/data/static-h3-64.json +++ b/site/data/static-h3-64.json @@ -37,6 +37,25 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 59773, + "avg_latency": "67.70ms", + "p99_latency": "228.58ms", + "cpu": "4509.9%", + "memory": "936MiB", + "connections": 64, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "3.55GB/s", + "reconnects": 0, + "status_2xx": 299463, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "frankenphp-trueasync", "language": "PHP", diff --git a/site/data/upload-256.json b/site/data/upload-256.json index 89c0303a..125b37b1 100644 --- a/site/data/upload-256.json +++ b/site/data/upload-256.json @@ -159,6 +159,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 1450, + "avg_latency": "170.33ms", + "p99_latency": "792.80ms", + "cpu": "4858.8%", + "memory": "480MiB", + "connections": 256, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "215.60KB/s", + "input_bw": "11.50GB/s", + "reconnects": 1368, + "status_2xx": 7252, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/data/upload-32.json b/site/data/upload-32.json index e02ecfac..cbd16d36 100644 --- a/site/data/upload-32.json +++ b/site/data/upload-32.json @@ -159,6 +159,26 @@ "status_4xx": 0, "status_5xx": 0 }, + { + "framework": "effinitive", + "language": "C#", + "rps": 1166, + "avg_latency": "27.34ms", + "p99_latency": "239.20ms", + "cpu": "3008.1%", + "memory": "200MiB", + "connections": 32, + "threads": 64, + "duration": "5s", + "pipeline": 1, + "bandwidth": "173.39KB/s", + "input_bw": "9.25GB/s", + "reconnects": 1170, + "status_2xx": 5833, + "status_3xx": 0, + "status_4xx": 0, + "status_5xx": 0 + }, { "framework": "elysia", "language": "TS", diff --git a/site/static/logs/api-16/1024/effinitive.log b/site/static/logs/api-16/1024/effinitive.log new file mode 100644 index 00000000..6861642b --- /dev/null +++ b/site/static/logs/api-16/1024/effinitive.log @@ -0,0 +1,15 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 +Cannot load library libgssapi_krb5.so.2 +Error: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory diff --git a/site/static/logs/api-4/256/effinitive.log b/site/static/logs/api-4/256/effinitive.log new file mode 100644 index 00000000..6861642b --- /dev/null +++ b/site/static/logs/api-4/256/effinitive.log @@ -0,0 +1,15 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 +Cannot load library libgssapi_krb5.so.2 +Error: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory diff --git a/site/static/logs/async-db/1024/effinitive.log b/site/static/logs/async-db/1024/effinitive.log new file mode 100644 index 00000000..6861642b --- /dev/null +++ b/site/static/logs/async-db/1024/effinitive.log @@ -0,0 +1,15 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 +Cannot load library libgssapi_krb5.so.2 +Error: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory diff --git a/site/static/logs/baseline-h2/1024/effinitive.log b/site/static/logs/baseline-h2/1024/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/baseline-h2/1024/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/baseline-h2/256/effinitive.log b/site/static/logs/baseline-h2/256/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/baseline-h2/256/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/baseline-h3/64/effinitive.log b/site/static/logs/baseline-h3/64/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/baseline-h3/64/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/baseline/4096/effinitive.log b/site/static/logs/baseline/4096/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/baseline/4096/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/baseline/512/effinitive.log b/site/static/logs/baseline/512/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/baseline/512/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/echo-ws-pipeline/16384/effinitive.log b/site/static/logs/echo-ws-pipeline/16384/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/echo-ws-pipeline/16384/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/echo-ws-pipeline/4096/effinitive.log b/site/static/logs/echo-ws-pipeline/4096/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/echo-ws-pipeline/4096/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/echo-ws-pipeline/512/effinitive.log b/site/static/logs/echo-ws-pipeline/512/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/echo-ws-pipeline/512/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/echo-ws/16384/effinitive.log b/site/static/logs/echo-ws/16384/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/echo-ws/16384/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/echo-ws/4096/effinitive.log b/site/static/logs/echo-ws/4096/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/echo-ws/4096/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/echo-ws/512/effinitive.log b/site/static/logs/echo-ws/512/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/echo-ws/512/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/json/4096/effinitive.log b/site/static/logs/json/4096/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/json/4096/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/limited-conn/4096/effinitive.log b/site/static/logs/limited-conn/4096/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/limited-conn/4096/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/limited-conn/512/effinitive.log b/site/static/logs/limited-conn/512/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/limited-conn/512/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/pipelined/4096/effinitive.log b/site/static/logs/pipelined/4096/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/pipelined/4096/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/pipelined/512/effinitive.log b/site/static/logs/pipelined/512/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/pipelined/512/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/static-h2/1024/effinitive.log b/site/static/logs/static-h2/1024/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/static-h2/1024/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/static-h2/256/effinitive.log b/site/static/logs/static-h2/256/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/static-h2/256/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/static-h3/64/effinitive.log b/site/static/logs/static-h3/64/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/static-h3/64/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/static/1024/effinitive.log b/site/static/logs/static/1024/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/static/1024/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/static/4096/effinitive.log b/site/static/logs/static/4096/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/static/4096/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/static/6800/effinitive.log b/site/static/logs/static/6800/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/static/6800/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/upload/256/effinitive.log b/site/static/logs/upload/256/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/upload/256/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443 diff --git a/site/static/logs/upload/32/effinitive.log b/site/static/logs/upload/32/effinitive.log new file mode 100644 index 00000000..0ba5f8a5 --- /dev/null +++ b/site/static/logs/upload/32/effinitive.log @@ -0,0 +1,13 @@ +✅ Registered: GET /async-db -> AsyncDatabaseEndpoint +✅ Registered: GET /pipeline -> PipelineEndpoint +✅ Registered: GET /baseline11 -> BaselineGetEndpoint +✅ Registered: POST /baseline11 -> BaselinePostEndpoint +✅ Registered: GET /baseline2 -> Baseline2GetEndpoint +✅ Registered: GET /compression -> CompressionEndpoint +✅ Registered: GET /db -> DatabaseEndpoint +✅ Registered: GET /json/{count} -> JsonEndpoint +✅ Registered: POST /upload -> UploadEndpoint + quic://localhost:8443 (HTTP/3) +EffinitiveFramework listening on: + http://localhost:8080 + https://localhost:8443