>  기사  >  백엔드 개발  >  Go WebSocket은 연결 끊김을 어떻게 처리합니까?

Go WebSocket은 연결 끊김을 어떻게 처리합니까?

WBOY
WBOY원래의
2024-06-03 10:38:58961검색

Go WebSocket 라이브러리는 연결 끊김을 처리하는 CloseHandler 메커니즘을 제공합니다. Conn 유형은 클라이언트가 연결을 닫을 때 Close 이벤트를 발생시킵니다. defer 문을 사용하여 CloseHandler 함수를 등록하여 이벤트를 수신하고 Conn 및 종료 이유 상수를 수신합니다. CloseHandler 함수가 자동으로 호출되어 연결 끊김을 처리하고 애플리케이션을 다시 시작할 수 있는 기회를 제공합니다.

Go WebSocket 如何处理断开连接?

Go WebSocket: 연결 끊김을 적절하게 처리

실시간 웹 애플리케이션을 구축할 때 WebSocket은 클라이언트와 서버 간의 양방향 통신을 위한 강력한 도구입니다. 그러나 애플리케이션 안정성과 신뢰성을 보장하려면 클라이언트 연결 끊김 상황을 처리하는 것이 중요합니다.

연결 끊김 처리

Go WebSocket 라이브러리는 연결 끊김 처리를 위한 내장 메커니즘을 제공합니다. 클라이언트가 연결을 닫으면 [Conn](https://pkg.go.dev/github.com/gorilla/websocket#Conn) 유형이 Close를 트리거합니다. 이벤트 . Conn](https://pkg.go.dev/github.com/gorilla/websocket#Conn) 类型会触发 Close 事件。

要监听此事件,可以使用 defer 语句将 [CloseHandler](https://pkg.go.dev/github.com/gorilla/websocket#CloseHandler) 函数注册到 WebSocket 连接:

import (
    "github.com/gorilla/websocket"
)

func handleConnection(ws *websocket.Conn) {
    defer ws.CloseHandler()(ws, websocket.CloseNormalClosure)
    // ...
}

CloseHandler 函数接受两个参数:*Conn 和一个表示关闭原因的常量(例如 websocket.CloseNormalClosure 表示正常关闭)。当连接被关闭时,该函数将被自动调用。

实战案例

以下是一个处理断开连接的简单实战案例:

package main

import (
    "fmt"
    "github.com/gorilla/websocket"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        ws, err := websocket.Upgrade(w, r, nil, nil, nil)
        if err != nil {
            fmt.Printf("upgrade error: %v", err)
            return
        }
        defer ws.CloseHandler()(ws, websocket.CloseNormalClosure)

        // 监听消息和断开连接事件
        go func() {
            for {
                _, _, err := ws.ReadMessage()
                if err != nil {
                    // 处理错误(例如连接断开)
                    return
                }
            }
        }()
    })

    http.ListenAndServe(":8080", nil)
}

在处理断开连接方面,CloseHandler

이 이벤트를 수신하려면 [CloseHandler](https://pkg.go.dev/github.com/gorilla/websocket)에 대한 defer 문을 사용할 수 있습니다. #CloseHandler) WebSocket 연결에 등록된 함수: 🎜rrreee🎜CloseHandler 이 함수는 두 개의 매개변수 *Conn와 닫는 이유를 나타내는 상수(예: websocket)를 허용합니다. .CloseNormalClosure는 정상적인 종료를 의미합니다). 이 함수는 연결이 닫힐 때 자동으로 호출됩니다. 🎜🎜🎜실용 사례🎜🎜🎜다음은 연결 끊김 처리에 대한 간단한 실제 사례입니다. 🎜rrreee🎜연결 끊김 처리 측면에서 CloseHandler는 애플리케이션이 클라이언트에서 복구하는 데 도움이 되는 간단하고 우아한 방법을 제공합니다. 이벤트 연결을 끊고 계속해서 정상적으로 작동합니다. 🎜

위 내용은 Go WebSocket은 연결 끊김을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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