-3
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服务器hanlde通过同步请求。

4

2 回答 2

3

我认为而不是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:1000 个并发请求的总持续时间为 10.6066411s

您可以看到您的问题的答案是否定的,它同时处理请求

更新:

如果请求的 URL 相同,您的浏览器可能会按顺序执行请求。请参阅针对同一 URL 的多个 Ajax 请求。这就解释了为什么响应时间是X*10s.

于 2017-07-22T04:00:14.553 回答
0

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

于 2017-07-24T01:41:57.233 回答