On Windows at least, "localhost" resolves to two IP addresses (in this order): "::1" (IPv6) and "127.0.0.1". The Racket `tcp-connect` function will try the fist one first, and since you probably don't bind your web server to the IPv6 address, the connection times out, than `tcp-connect` tries the IPv4 one and succeeds. This is why using "localhost" is slower than using "127.0.0.1".
I know this because I have been caught by it as well :-) My solution was to learn IpV6 and start my server on IPv6 :-) Perhaps curl and Chrome go straight for the IPv4 address. As a test, try starting your web server on an IPv6 address (::1) and see if things improve. Alex. On Wednesday, September 16, 2020 at 11:14:29 PM UTC+8 Stephen Foster wrote: > Thanks everyone. We resolved the issue over on the http-easy package: > https://github.com/Bogdanp/racket-http-easy/issues/6 > > I'll summarize for the curious: > > Turns out it's largely a "my system thing": requests to "localhost" are > slow, but 127.0.0.1 are fast. On Chrome and curl, both were fast, which is > why I assumed the slowdown was in some Racket package. It's more likely a > DNS issue. (I have to use an unfamiliar Windows machine for game > development; there's probably something misconfigured about the DNS.) > > In any event, my original problem is solved: I can use Racket's packages > and send requests to 127.0.0.1, and the spellcasting experience in > CodeSpells is super-snappy now. > > Thanks again, everyone! And thanks Bogdan -- both for the help, and for > the http-easy package. :) > > On Mon, Sep 14, 2020 at 3:42 PM Sam Phillips <[email protected]> wrote: > >> Hi Stephen, >> >> I ran this small benchmark against a remote web server, and was >> definitely getting better response using the http-easy module. >> >> https://gist.github.com/samdphillips/32763ebd0d938678c2972b1dd8ee5778 >> >> $ racket -e '(require (submod "http-perf.rkt" curl))' >> cpu time: 768 real time: 35299 gc time: 0 >> >> $ racket -e '(require (submod "http-perf.rkt" http-easy))' >> cpu time: 1810 real time: 17316 gc time: 70 >> >> On Mon, Sep 14, 2020 at 12:57 PM Stephen Foster <[email protected]> >> wrote: >> > >> > Finally circling back to this issue. I've disabled debugging in >> DrRacket and also done a test outside of DrRacket. It's still slow. :( >> > >> > I also tried the newer HTTP client: >> https://docs.racket-lang.org/http-easy/index.html. Like the others, it >> is also slow. >> > >> > I'll do some more digging. I'm currently trying to figure out if this >> is a "just me" / "just my system" problem. So... I'd be grateful if anyone >> who has written code that sends HTTP requests from Racket could chime in >> with: 1) I can confirm that sending HTTP requests from Racket has always >> been fast for me, or 2) I too have noticed Racket HTTP requests are slow. >> > >> > (Note that by "slow", I mean: takes noticeably longer than curl.) >> > >> > >> > >> > On Tue, Jul 7, 2020 at 12:21 PM Jon Zeppieri <[email protected]> wrote: >> >> >> >> Hi Stephen, >> >> >> >> Your video shows you running this code in DrRacket with debugging >> >> enabled. That usually affects performance. Have you made measurements >> >> when running this code outside of DrRacket? >> >> >> >> - Jon >> >> >> >> >> >> On Tue, Jul 7, 2020 at 2:13 PM Stephen Foster <[email protected]> >> wrote: >> >> > >> >> > I'm considering using Racket to remake my 3D game CodeSpells. I'm >> using http requests to have Unreal Engine and Racket talk to each other. >> >> > >> >> > When I use the http/request library, Racket fires off its GET >> request much slower than if it were to do a system call to curl. (Same is >> true if I use simple-http, which makes me think the problem might be a deep >> one.) >> >> > >> >> > Here's a video to demo the issue. Notice how, with curl, the >> experience is playable, whereas with the Racket function, there's way too >> much time between the spell landing and the effect occurring: >> >> > >> >> > https://youtu.be/jTqUFVlfBFA >> >> > >> >> > Obviously, I'd like to do things in a Rackety way. But I'm not >> above doing things the silly way. I'd just be grumpy about it. >> >> > >> >> > Any ideas? >> >> > >> >> > >> >> > >> >> > -- >> >> > You received this message because you are subscribed to the Google >> Groups "Racket Users" group. >> >> > To unsubscribe from this group and stop receiving emails from it, >> send an email to [email protected]. >> >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/racket-users/997693d6-b94a-4f69-85cf-aa475c807b20n%40googlegroups.com >> . >> > >> > >> > >> > -- >> > >> > >> > Stephen Foster >> > ThoughtSTEM Co-Founder >> > 318-792-2035 <(318)%20792-2035> >> > >> > -- >> > You received this message because you are subscribed to the Google >> Groups "Racket Users" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> an email to [email protected]. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/racket-users/CA%2BzSu2_%2BTKVTe--OZRU_BE_LyofFkA869c-2v%2BRJ76HjDQt4_w%40mail.gmail.com >> . >> > > > -- > > > Stephen Foster > ThoughtSTEM Co-Founder > 318-792-2035 <(318)%20792-2035> > -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/2bfc3532-6020-4dfd-81f4-80ed00a1ed3fn%40googlegroups.com.

