gpt4 book ai didi

sockets - Golang http 服务器应用程序有很多套接字 (CLOSE_WAIT)

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

应用程序可以工作几天。但是在某些时候,应用程序有很多处于 CLOSE_WAIT 状态的套接字,并且无法接收新的客户端。

也许是某种泛洪(例如:同步泛洪)?

网络统计-ant | grep CLOSE_WAIT |卫生间

3258 19548 260640

3258 - 套接字处于 CLOSE_WAIT 状态

更新:

编写一些处理程序:

 func GetScore(mongo *mgo.Session, redisConn redis.Conn, renderer handlers.Render) http.Handler {

mutex := sync.Mutex{}

return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

id := bson.ObjectIdHex(r.FormValue("id"))
banner := models.Banner{}
err := mongo.DB("db").C("collection").FindId(id).One(&banner)
if err != nil {
log.Panicf("Banner selecting error: %s", err);
}
mutex.Lock();
sports, _ := util.GetSports(redisConn)
mutex.Unlock();
sport, _ := sports.FindSport(banner.SportId)
comp, err := sport.FindCompetition(banner.CompetitionId)
if err != nil {
comp, _ = sport.FindCompetition(0);
log.Println("Competition not found");
}
game, err := comp.FindGame(banner.GameId)

if err != nil {
game, _ = comp.FindGame(0)
}
mutex.Lock();
scores := util.GetScore(redisConn, game.ID)
mutex.Unlock();
game.Score1 = scores[0]
game.Score2 = scores[1]
w.Header().Set("Content-Type", "application/json;application/json;charset=utf-8")
renderer.RenderJson(w, 200, &game)
}



func GetScore(redisConn redis.Conn, gameId int) ([]float32) {

redisKey := fmt.Sprintf("game-%d", gameId);
bBody, err := redis.Bytes(redisConn.Do("GET", redisKey))

if err != nil || len(bBody) == 0 {
response, err := http.DefaultClient.Get(fmt.Sprintf("%s%d", GameApi, gameId))

if err != nil {
log.Panicf("GetScore error: %s", err)
}

bBody, _ = ioutil.ReadAll(response.Body);
redisConn.Send("SET", redisKey, bBody)
redisConn.Send("EXPIRE", redisKey, 60 * 5)
redisConn.Flush()
}
events := GameJson{};
err = json.Unmarshal(bBody, &events)
if err != nil {
log.Panicf("GetScore json error: %s", err)
}

var event []struct {
Name string `json:"name"`
Price float32 `json:"price"`
}
if len(events.AllEvents.P1XP2) != 0 {
event = events.AllEvents.P1XP2[0].Events
} else {
event = events.AllEvents.Other[0].Events
}

return []float32{event[0].Price, event[1].Price}
}

最佳答案

CLOSE-WAIT 意味着 TCP 正在等待本地应用程序关闭套接字,已经收到来自对等方的关闭。

Maybe it is some kind of flooding(Example: Sync-flood)?

没有。这是您代码中的错误。您没有在某处关闭套接字。

The problem seems to be not in the code.

问题出在您的代码中。

Code tested several times.

但不是针对这种情况,或者是在产生这种问题的情况下。

But yesterday I did not have this problem.

所以昨天那些情况没有发生。

(Code was not changed.)

所以bug一直都存在

关于sockets - Golang http 服务器应用程序有很多套接字 (CLOSE_WAIT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40959277/

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