Почему 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 может выполнить запрос по синхронизации.