Почему fasthttp похож на один процесс?

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*10 с. fasthttp это один процесс?

через два дня... Я прошу прощения за этот вопрос, я описываю свой вопрос не очень хорошо. Мой вопрос вызван браузером, браузер запрашивает тот же URL-адрес при синхронизации, и это вводит меня в заблуждение, заставляет думать, что веб-сервер fasthttp hanlde запрос по синхронизации.

2 ответа

Решение

Я думаю, что вместо 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.6066411 с.

Вы можете видеть, что ответом на ваш вопрос является " Нет", он обрабатывает запрос одновременно.

ОБНОВИТЬ:

Если запрашиваемый URL-адрес совпадает, ваш браузер может выполнить запрос последовательно. См. Несколько запросов Ajax для одного и того же URL. Это объясняет, почему время отклика X*10s,

Я прошу прощения за этот вопрос, я не очень хорошо описываю свой вопрос. Мой вопрос вызван браузером , браузер запрашивает тот же URL-адрес при синхронизации, и это вводит меня в заблуждение, заставляет думать, что веб-сервер fasthttp может выполнить запрос по синхронизации.

Другие вопросы по тегам