0
如果我在Windows上運行下面的例子,我會趕緊打的TCP連接數限制(這是我設置爲64K),並得到錯誤:dial tcp 127.0.0.1:3306: connectex: Only one usage of each socket address (protocol/network address/port) is normally permitted.
如何解決多個併發時的TIME_WAIT狀態問題?
我看到這一切TIME_WAIT
狀態等待有一輩子就結:netstat -ano|findstr 3306
爲什麼不立即關閉連接?
代碼:
package main
import (
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
"log"
"sync"
)
var (
db_instance *sqlx.DB
wg sync.WaitGroup
)
func main() {
db, err := sqlx.Connect("mysql", "user:[email protected]/table")
if err != nil {
log.Fatalln(err)
}
defer db.Close()
db_instance = db
for {
for l := 0; l < 50; l++ {
wg.Add(1)
go DB_TEST()
}
wg.Wait()
}
}
func DB_TEST() {
defer wg.Done()
var s string
err := db_instance.QueryRow("SELECT NOW()").Scan(&s)
if err != nil {
log.Println(err)
return
}
log.Println(s)
}
,因爲你在'main()'中做了'推遲db.Close()',並且只在程序停止時執行。 – RickyA
@RickyA:不好嗎?在程序結束時關閉數據庫連接...你將關閉與數據庫的連接? –
關閉它是好的,但我只是回答你爲什麼它不關閉的問題。我對這個軟件包並不熟悉,所以也許它希望在每次調用之後關閉連接,或者在內部保持一個連接池。這應該在文檔中。 – RickyA