rs-netty 1.1.0

A Tokio-native typed TCP/UDP pipeline framework inspired by Netty.
Documentation
# Benchmarks

`benchmarks/` 下包含三个可比较 harness:

- `benchmarks/rs-netty`:rs-netty echo server/client。
- `benchmarks/tokio`:裸 Tokio echo server/client。
- `benchmarks/netty`:Java Netty echo server/client。

它们对齐了 wire protocols:

- `line`:TCP line echo,`payload + "\n"`- `len`:TCP length-field echo,`u32be length + payload`- `udp`:UDP datagram echo。

## Directional Snapshot

benchmark 结果是方向性快照,不是通用性能承诺。吞吐、延迟和 RSS 会受 host、NIC、OS、JVM warmup、TCP 设置、payload shape、并发数、in-flight 数、是否 loopback 等因素影响。

README 中的表格来自本仓库 benchmark harness 的一次本地非 loopback 运行。它适合用于理解当前实现的大致量级和相对趋势,不应作为在任意生产环境中的保证。

## Runner

主入口是:

```bash
python3 benchmarks/run.py \
  --impls rs-netty tokio netty \
  --protocols line len udp \
  --connections 100 \
  --messages 1000000 \
  --payload 128 \
  --in-flight 16 \
  --output-dir benchmarks/results
```

runner 会:

- 自动选择非 loopback 本地 IPv4,或使用 `--host`- 拒绝 `localhost``127.0.0.1``::1`- build selected implementations。
- 启动 server 并采样 server RSS。
- 运行 matching client。
- 解析 `RESULT ...` 行。
- 写出 CSV、日志和图表。

输出包括:

- `results.csv`
- `*.server.out.log`
- `*.server.err.log`
- `*.client.out.log`
- `*.client.err.log`
- `throughput.png`
- `p99_latency.png`
- `server_memory.png`
- `latency_percentiles.png`

开启 `--profile cpu` 时,macOS `sample(1)` 会生成 server sample 和 profile summary。

## Smoke Run

快速冒烟:

```bash
python3 benchmarks/run.py \
  --impls rs-netty tokio \
  --protocols len \
  --connections 2 \
  --messages 100 \
  --payload 32 \
  --in-flight 4
```

如果要包含 Netty,需要本机有 Maven 和 JDK。Rust harness release build 由 runner 自动执行。

## rs-netty Harness Notes

`benchmarks/rs-netty/src/main.rs` 包含:

- `server-rs-line` / `server-rs-line-string``LineCodec` + `Handler<String>`- `server-rs-line-bytes`:自定义 `BytesLineCodec` + `Handler<Bytes>`- `server-rs-line-sync`:await `write_and_flush` 的 line echo 变体。
- `server-rs-len`:自定义组合 codec,内部使用 `LengthFieldBasedFrameDecoder``LengthFieldPrepender`- `server-rs-udp``Utf8DatagramCodec` + `DatagramHandler<String>`
client 端用裸 Tokio 连接、记录 latency percentiles,并打印统一 `RESULT` 行。