最后一步,等待舊服務連接停止
到此為止,就這樣,我們已經將其傳到另一個正在正確運行的進程,對于舊服務器的最后操作是等其連接關閉。由于標準庫里提供了sync.WaitGroup結構體,用go實現這個功能很簡單。
每次接收一個連接,在WaitGroup上加1,然后,我們在它完成時將計數器減一:
1
2
3 |
for { conn, err := listener.Accept()
wg.Add(1) go func() { handle(conn) wg.Done() }()}
|
至于等待連接的結束,你僅需要wg.Wait(),因為沒有新的連接,我們等待wg.Done()已經被所有正在運行的handler調用。