0
私はWindows上の例の下で実行した場合、私はすぐに(私が64Kに設定されている)TCP接続の制限をヒットし、エラーが発生します: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()'で 'defer db.Close()'を実行し、プログラムが停止したときにのみ実行されるためです。 – RickyA
@RickyA:そうじゃない?プログラムの終わりにdb接続を閉じます。どこにdbへの接続を閉じますか? –
それを閉じることは大丈夫ですが、私はちょうどそれがなぜ閉ざされるのかについてあなたの質問に答えていました。私はそのパッケージに慣れていないので、各呼び出しの後に接続を閉じたい、または内部的に接続プールを維持することが望ましいかもしれません。それはドキュメントにあるはずです。 – RickyA