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