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