主要是利用 系统监听Interrupt 信号,并且提前关闭服务器 监听,并且等待先前连接处理完毕后在退出程序。
Server 代码:
package main
import (
"net"
"os"
"os/signal"
"strings"
"sync"
"time"
. "github.com/soekchl/myUtils"
)
var (
wg sync.WaitGroup = sync.WaitGroup{} // 等待各个socket连接处理
)
func main() {
stop_chan := make(chan os.Signal) // 接收系统中断信号
signal.Notify(stop_chan, os.Interrupt)
listen, err := net.Listen("tcp", ":8080")
if err != nil {
Error(err)
return
}
go func() {
<-stop_chan
Warn("Get Stop Command. Now Stoping...")
if err = listen.Close(); err != nil {
Error(err)
}
}()
Notice("Start listen :8080 ... ")
for {
conn, err :&#