Skip to content

Subsequent requests on reused connection delayed by 40 milliseconds #39

@tdryer

Description

@tdryer

When running oxhttp with a client that supports connection reuse on Linux, responses after the first response on the same connection experience a 40 millisecond delay:

$ time curl -s http://localhost:8080 http://localhost:8080 > /dev/null
real 0m0.045s

This delay occurs due to an interaction between oxhttp, Nagle's algorithm, and TCP delayed ACK:

  • oxhttp writes the response headers and body to the socket separately, resulting in two separate TCP segments.
  • TCP delayed ACK causes the client to wait before acknowledging the first segment, because it is smaller than the maximum segment size.
  • Nagle's algorithm causes the server to wait before sending the second segment, because the first segment is unacknowledged.

I think the first response on a connection is unaffected because Linux always acknowledges the first data segment immediately.

This could be fixed in oxhttp by either:

  • Writing the response headers and body to the socket together.
  • Disabling Nagle's algorithm using TcpStream::set_nodelay.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions