中斷Go 例程執行(*TCPListener) Accept
在Go 中建立TCP 伺服器時,您可能會遇到優雅的挑戰關閉伺服器並中斷goroutine 處理func (*TCPListener) Accept.
Go 中, func (*TCPListener) Accept 會阻止執行,直到收到連線為止。要中斷這個goroutine,你應該:
關閉net.Listener:
中斷Accept goroutine的關鍵是關閉從net取得的net.Listener。聽(...)。透過關閉監聽器,您向作業系統發出訊號,表示不再接收連接,從而導致 Accept goroutine 退出。
從 Goroutine 返回:
關閉後監聽者,確保你的 goroutine 返回。如果 goroutine 在 Accept 呼叫之後有程式碼,它將繼續執行,並可能導致意外的行為或錯誤。
範例程式碼:
package main
import (
"fmt"
"net"
)
func main() {
ln, err := net.Listen("tcp", ":8080")
if err != nil {
// Handle error
}
go func() {
for {
conn, err := ln.Accept()
if err != nil {
if err == net.ErrClosed {
return // Listener was closed
}
// Handle other errors
}
// Handle connection
conn.Close()
}
}()
fmt.Println("Press enter to stop...")
var input string
fmt.Scanln(&input)
ln.Close() // Close the listener, interrupting the Accept loop
}
這段程式碼在連接埠 8080 上建立一個 TCPListener 並啟動一個 goroutine 來處理無限循環中的傳入連線。當使用者按下 Enter 鍵時,程式將關閉監聽器並中斷阻塞的 Accept 調用,導致 goroutine 返回。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3