Load and capacity
Capacity depends on handlers, workers, codecs, message sizes and external services. Measure your application rather than reusing another service’s RPS figure.
Measurements
Section titled “Measurements”- Throughput and p50/p95/p99 latency at a fixed client count.
- Per-worker CPU/RSS, open connections and file descriptors.
- Send-buffer size and onBufferFull/onBufferDrain events.
- Timeouts, connection failures, HTTP 4xx/5xx and long-lived connection drops.
Start with an echo/health handler, then add database and business logic. When every connection in one worker stalls, look for synchronous I/O or CPU work in callbacks. More workers do not fix unbounded buffers or provide shared process memory.
Reproducible runs
Section titled “Reproducible runs”Record application commit, PHP/extensions, backend, worker count, OS limits, payload sizes, warm-up and client profile. Run load generation separately. Compare configurations using identical timeout/error rules; do not exclude failures from latency reports.
For WebSocket/SSE, measure reconnects, slow readers and rollout behavior. HTTP RPS does not describe long-lived connection capacity.