gpt4 book ai didi

http - 为什么这个 go http 服务器在多次请求后停止响应?

转载 作者:数据小太阳 更新时间:2023-10-29 03:37:49 24 4
gpt4 key购买 nike

我正在构建一个监听端口 4242 的 Go http 服务器。每个请求都会触发我程序的一个函数。一切正常,但在 30/40 个请求之后,它就停止响应了。

我已经在没有服务器的情况下运行了整个程序(通过标准输入/标准输出与其交互)并且没有问题或错误。只有当我从 http 请求触发它时才会出现问题。

此外,当我在这些函数中添加一些工作负载时,我会更快地遇到错误。我怀疑是内存问题,但话又说回来,如果没有服务器,就没有错误。

服务器没有崩溃,也没有错误信息。我的函数代码实际上停止在随机行执行(尝试调试代码并看到例程实际上停止执行我的代码并每次都停止在随机位置)

package server

import (
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"strconv"
"time"

"github.com/gogogomoku/gomoku/internal/brain"
"github.com/gorilla/mux"
)

type SimpleResponse struct {
ResCode int `json:"code" xml:"code"`
Message string `json:"message" xml:"message"`
}

func home(w http.ResponseWriter, r *http.Request) {
// ..
}

func startGame(w http.ResponseWriter, r *http.Request) {
// ..
}

func restartGame(w http.ResponseWriter, r *http.Request) {
fmt.Println("Request")
fmt.Println(r)
InitializeValues()
StartRound()
json.NewEncoder(w).Encode(GameRound)
fmt.Println("Response")
fmt.Println(w)
}

func MakeMove(w http.ResponseWriter, r *http.Request) {
// ...
}

func StartServer() {
router := mux.NewRouter().StrictSlash(true)
router.Use(commonMiddleware)
router.HandleFunc("/", home)
router.HandleFunc("/start", startGame)
router.HandleFunc("/restart", restartGame)
router.HandleFunc("/move/{pos}/id/{id}", MakeMove)
logger := log.New(os.Stdout, "http: ", log.LstdFlags)
logger.Println("Server is starting...")
srv := &http.Server{
Handler: router,
Addr: "localhost:4242",
WriteTimeout: 5 * time.Second,
ReadTimeout: 10 * time.Second,
IdleTimeout: 15 * time.Second,
ErrorLog: logger,
}
if err := srv.ListenAndServe(); err != nil {
log.Fatal("ListenAndServe: ", err)
}
}

func commonMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Add("Content-Type", "application/json")
next.ServeHTTP(w, r)
})
}

例如,如果我在 http://localhost:4242/restart 上执行 http 请求他们工作正常,我得到了 json。在 30/35 个请求之后,服务器似乎卡住了,我没有得到任何响应,没有崩溃,没有消息,什么都没有。

有什么想法吗?

谢谢!

最佳答案

启动服务器的调用是作为常规调用完成的:

go StartServer()

删除它似乎可以解决问题,但为什么这仍然是一个问题? (当然,假设例程没有执行到最后一条指令)

关于http - 为什么这个 go http 服务器在多次请求后停止响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57245294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com