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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions