1 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
我認(rèn)為Go中的事件循環(huán)不必是循環(huán)。
在單獨(dú)的goroutine中處理關(guān)閉和連接似乎更簡(jiǎn)單:
go func() {
<-s.closeChan
// close server, release resources, etc.
s.listener.Close()
}()
for {
conn, err := s.listener.Accept()
if err != nil {
// log, return
}
// handle conn routine
}
請(qǐng)注意,您也可以在不使用通道的情況下直接在“關(guān)閉”函數(shù)中關(guān)閉偵聽(tīng)器。我在這里所做的是使用Listener.Accept的錯(cuò)誤返回值來(lái)促進(jìn)例程間的通信。
如果在關(guān)閉和連接處理實(shí)現(xiàn)的某個(gè)時(shí)候需要保護(hù)要在回答時(shí)關(guān)閉的某些資源,則可以使用Mutex。但是通??梢员苊膺@種情況。
- 1 回答
- 0 關(guān)注
- 241 瀏覽
添加回答
舉報(bào)