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