Служба просто читает параметры запроса, создает объект и возвращает его запрашивающей стороне. И все же время от времени я получаю время отклика 200 мс. Такое ощущение, что есть какой-то ресурс, который не очищается правильно или что-то в этом роде, но я даже не знаю, где мне искать.
Вот что я пробовал:
- Отключение Keep-Alive. Здесь нет загруженных дополнительных ресурсов, поэтому я не уверен, что мне это нужно.
- Установка ответа
Connection
Заголовок для закрытия. Те же причины.
- Увеличено количество открытых файлов на сервере до 65535.
Настройки дескриптора открытого файла:
/ и т.д. / sysctl.conf
# increase max open files
fs.file-max = 65536
/ и т.д. / безопасность / limits.conf:
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
Код:
package main
import (
"time"
"net/http"
"encoding/json"
"github.com/gorilla/mux"
)
func main() {
// router
router := mux.NewRouter()
// v1 router
v1router := router.PathPrefix("/v1").Subrouter()
v1router.HandleFunc("/resource", createResource).Methods("GET")
// server config
server := &http.Server{
Addr: ":8080",
ReadTimeout: time.Millisecond * 500,
WriteTimeout: time.Millisecond * 100,
IdleTimeout: time.Millisecond * 500,
Handler: router,
}
server.SetKeepAlivesEnabled(false)
// start server
server.ListenAndServe()
}
type Resource struct {
Id string
Name string
}
func createResource(response http.ResponseWriter, request *http.Request) {
// connection header
response.Header().Set("Connection", "close")
defer request.Body.Close()
// get query params
params := request.URL.Query()
// create resource
resource := Resource{
Id: "testid",
Name: params.Get("name"),
}
// convert resource to string
resourceStr, _ := json.Marshal(resource)
response.WriteHeader(http.StatusOK)
_, _ = response.Write([]byte(resourceStr))
}