Go 为什么fasthttp类似于单进程?
多个请求,花费的时间约为X*10秒。 fasthttp是单进程的吗 两天后… 很抱歉,我对这个问题描述得不好。我的问题是由浏览器引起的,浏览器通过同步请求相同的url,这误导了我,它使我认为fasthttp web服务器通过同步来处理请求。我认为代替fasthttp的是单进程?,您在问fasthttp是否同时处理客户端请求 我非常确定任何服务器(包括fasthttp)包都将并发处理客户端请求。您应该编写测试/基准测试,而不是通过多个浏览器手动访问服务器。以下是此类测试代码的示例:Go 为什么fasthttp类似于单进程?,go,fasthttp,Go,Fasthttp,多个请求,花费的时间约为X*10秒。 fasthttp是单进程的吗 两天后… 很抱歉,我对这个问题描述得不好。我的问题是由浏览器引起的,浏览器通过同步请求相同的url,这误导了我,它使我认为fasthttp web服务器通过同步来处理请求。我认为代替fasthttp的是单进程?,您在问fasthttp是否同时处理客户端请求 我非常确定任何服务器(包括fasthttp)包都将并发处理客户端请求。您应该编写测试/基准测试,而不是通过多个浏览器手动访问服务器。以下是此类测试代码的示例: request
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)
}
package main\u测试
进口(
“io/ioutil”
“net/http”
“同步”
“测试”
“时间”
)
func doRequest(uri字符串)错误{
resp,err:=http.Get(uri)
如果错误!=零{
返回错误
}
延迟响应主体关闭()
_,err=ioutil.ReadAll(resp.Body)
如果错误!=零{
返回错误
}
归零
}
func TestGet(t*testing.t){
N:=1000
wg:=sync.WaitGroup{}
工作组.添加(N)
开始:=时间。现在()
对于i:=0;i
结果(在我的电脑里)是
fasthttp_test.go:42:1000个并发请求的总持续时间为10.6066411s
您可以看到问题的答案是否,它同时处理请求
更新:
如果请求的URL相同,浏览器可能会按顺序执行请求。看见这解释了为什么响应时间为
X*10s
对于这个问题,我很抱歉,我的问题描述得不好。我的问题是由浏览器引起的,浏览器通过同步请求相同的url,这误导了我,它使我认为fasthttp web服务器可以通过同步发送请求。您是如何在客户端发出多个请求的?请提供客户端代码。我只使用浏览器,打开多个“”,最后一次打开,花费X*10秒。我的英语很差。非常感谢。你的回答很正确。让我知道原因。
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))
}