>  기사  >  백엔드 개발  >  Go에서 WebSocket 연결을 올바르게 닫는 방법

Go에서 WebSocket 연결을 올바르게 닫는 방법

PHPz
PHPz원래의
2023-04-10 14:22:171851검색

WebSocket 기술이 널리 적용됨에 따라 점점 더 많은 프로그래머가 Go 언어를 사용하여 WebSocket 기능을 구현하기 시작했습니다. WebSocket 기능을 구현하는 과정에서 프로그래머는 Go 언어 코드에서 WebSocket 연결을 올바르게 닫는 방법이라는 중요한 문제에 직면하는 경우가 많습니다. 이 문서에서는 Go에서 WebSocket 연결을 올바르게 닫는 방법을 설명합니다.

WebSocket 연결 닫기 방법

WebSocket 연결을 닫는 방법에는 두 가지가 있습니다.

  1. 활성 닫기 방법: 클라이언트 또는 서버는 닫기 메시지를 보내 WebSocket 연결을 닫을 수 있습니다.
  2. 수동 종료 방식: TCP 연결이 끊기거나 예외 메시지가 수신되면 WebSocket 연결도 종료됩니다.

GO 언어에서 WebSocket 연결 닫기

Go 언어에서는 WebSocket 연결의 Close() 메서드를 호출하여 WebSocket 연결을 닫을 수 있습니다. WebSocket 연결을 적극적으로 닫으려면 클라이언트 또는 서버 측에서 이 메서드를 호출하면 됩니다. WebSocket 연결을 수동적으로 닫으려면 서버 측에서 읽기 및 쓰기 작업을 감지할 수 있습니다. 연결 예외가 감지되면 Close() 메서드를 호출하여 WebSocket 연결을 닫습니다.

다음은 Go에서 WebSocket 연결을 닫는 샘플 코드입니다.

func handleWebSocket(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println("upgrade:", err)
        return
    }
    defer conn.Close()

Loop:
    for {
        messageType, message, err := conn.ReadMessage()
        if err != nil {
            if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
                log.Printf("error: %v", err)
            }
            break Loop
        }
        // handle message
    }
}

위 코드에서는 Gorilla WebSocket에서 제공하는 Upgrade() 메서드를 사용하여 HTTP 연결을 WebSocket 연결로 업그레이드합니다. WebSocket 연결을 처리할 때 루프를 사용하여 WebSocket 메시지를 읽고 연결 예외가 감지되면 Close() 메서드를 호출하여 WebSocket 연결을 닫습니다.

WebSocket 연결을 닫을 때 리소스 누출을 방지해야 한다는 점에 유의해야 합니다. 위 코드에서는 함수를 종료할 때 defer를 사용하여 WebSocket 연결을 닫습니다. 이렇게 하면 함수 처리 중에 예외가 발생하더라도 리소스 누출을 방지하기 위해 WebSocket 연결이 제때 닫힙니다.

요약

이 글의 서문을 통해 독자들은 Go에서 WebSocket 연결을 올바르게 닫는 방법을 어느 정도 이해했다고 믿습니다. 실제 개발 프로세스에서는 특정 애플리케이션 시나리오에 따라 WebSocket 연결을 닫는 방법을 선택해야 합니다. Active Closing이든 Passive Closing이든 WebSocket 연결을 닫을 때 리소스 누수를 방지하고 프로그램의 안정적인 작동을 보장해야 합니다.

위 내용은 Go에서 WebSocket 연결을 올바르게 닫는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.