gpt4 book ai didi

go - 为什么fasthttp像单进程?

转载 作者:数据小太阳 更新时间:2023-10-29 03:43:55 25 4
gpt4 key购买 nike

requestHandler := func(ctx *fasthttp.RequestCtx) {

time.Sleep(time.Second*time.Duration(10))
fmt.Fprintf(ctx, "Hello, world! Requested path is %q", ctx.Path())
}


s := &fasthttp.Server{
Handler: requestHandler
}

if err := s.ListenAndServe("127.0.0.1:82"); err != nil {
log.Fatalf("error in ListenAndServe: %s", err)
}

多个请求,耗时X*10s。fasthttp是单进程?

两天后...对于这个问题,我很抱歉,我的问题描述得不好。我的问题是由浏览器引起的,浏览器通过同步请求相同的 url,它误导了我,它让我认为 fasthttp web 服务器通过同步处理请求。

最佳答案

我认为不是fasthttp 是单进程?,你问的是 fasthttp 是否并发处理客户端请求?

我非常确定任何服务器(包括fasthttp)包都将同时处理客户端请求。您应该编写测试/基准测试,而不是通过多个 浏览器手动访问服务器。以下是此类测试代码的示例:

package main_test

import (
"io/ioutil"
"net/http"
"sync"
"testing"
"time"
)

func doRequest(uri string) error {
resp, err := http.Get(uri)
if err != nil {
return err
}
defer resp.Body.Close()

_, err = ioutil.ReadAll(resp.Body)
if err != nil {
return err
}

return nil
}

func TestGet(t *testing.T) {
N := 1000
wg := sync.WaitGroup{}
wg.Add(N)

start := time.Now()
for i := 0; i < N; i++ {
go func() {
if err := doRequest("http://127.0.0.1:82"); err != nil {
t.Error(err)
}
wg.Done()
}()
}
wg.Wait()

t.Logf("Total duration for %d concurrent request(s) is %v", N, time.Since(start))
}

结果(在我的电脑上)是

fasthttp_test.go:42: Total duration for 1000 concurrent request(s) is 10.6066411s

可以看到你的问题的答案是No, it handles the request concurrently>

更新:

如果请求的 URL 相同,您的浏览器可能会按顺序执行请求。参见 Multiple Ajax requests for same URL .这解释了为什么响应时间是 X*10s

关于go - 为什么fasthttp像单进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45250120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com