Skip to content

High Latency on First Request to localhost #544

Description

@julmb

I have this code:

main :: IO ()
main = do
    request <- parseRequest "http://localhost:3000/test"
    getCurrentTime >>= print
    httpBS request >>= T.putStr . T.decodeUtf8Lenient . getResponseBody
    getCurrentTime >>= print
    httpBS request >>= T.putStr . T.decodeUtf8Lenient . getResponseBody
    getCurrentTime >>= print

With a simple servant service at http://localhost:3000/test, I get:

2024-09-05 03:47:47.018037777 UTC
Hello, world!
2024-09-05 03:47:47.271253156 UTC
Hello, world!
2024-09-05 03:47:47.272148168 UTC

Given that this is all local, I would have expected these requests to finish very fast. However, the first request takes about 250ms, only subsequent ones are fast.

I did some investigating, and it seems that getAddrInfo returns [::1]:3000 and 127.0.0.1:3000, in that order. The function firstSuccessful then attempts to connect to each of these, staggered by 250ms, which only succeeds for the second address.

Not sure if there is an easy/elegant solution to this, but it is very unfortunate that a simple connection to localhost incurs such a high latency on the first request.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions