Go에서는 갑작스러운 종료와 잠재적인 데이터 손실을 방지하려면 수신 서버를 적절하게 중지하는 것이 필수적입니다. . 한 가지 과제는 표준 라이브러리에서 명시적으로 내보내지지 않았기 때문에 리스너가 닫혔음을 나타내는 특정 오류를 식별하는 것입니다.
이 문제를 해결하기 위해 완료 채널을 활용하여 다음을 수행할 수 있습니다. 서버 종료가 임박했다는 신호를 보냅니다.
이제 수정된 Serve() 함수가 이를 처리합니다. 오류는 다르게 발생합니다:
func (es *EchoServer) serve() { for { conn, err := es.listen.Accept() if err != nil { select { case <-es.done: // If we called stop() then there will be a value in es.done, so // we'll get here and we can exit without showing the error. default: log.Printf("Accept failed: %v", err) } return } go es.respond(conn.(*net.TCPConn)) } }
수정된 stop() 메서드는 이제 리스너를 닫기 전에 완료된 채널에 신호를 보냅니다.
// Stop the server by closing the listening listen func (es *EchoServer) stop() { es.done <- true // We can advance past this because we gave it a buffer of 1 es.listen.Close() // Now the Accept will have an error above }
이 접근 방식은 Go에서 서버 중단을 처리하는 개선되고 우아한 방법을 제공합니다. 완료 채널을 활용하면 원치 않는 오류 메시지 표시를 방지하는 동시에 서버 종료에 대한 제어를 유지할 수 있습니다.
위 내용은 Go 서버를 정상적으로 중지하고 '닫힌 네트워크 연결 사용' 오류를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!