Maison  >  Article  >  développement back-end  >  Comment Go WebSocket gère-t-il les déconnexions ?

Comment Go WebSocket gère-t-il les déconnexions ?

WBOY
WBOYoriginal
2024-06-03 10:38:58951parcourir

La bibliothèque Go WebSocket fournit le mécanisme CloseHandler pour gérer la déconnexion. Le type Conn déclenche l'événement Close lorsque le client ferme la connexion. Utilisez l'instruction defer pour enregistrer la fonction CloseHandler afin d'écouter l'événement et de recevoir les constantes Conn et de motif de fermeture. La fonction CloseHandler est automatiquement appelée, offrant la possibilité de gérer la déconnexion et de reprendre l'application.

Go WebSocket 如何处理断开连接?

Go WebSocket : Gérez les déconnexions avec élégance

Lors de la création d'applications Web en temps réel, WebSocket est un outil puissant pour la communication bidirectionnelle entre le client et le serveur. Cependant, il est essentiel de gérer les situations de déconnexion des clients pour garantir la stabilité et la fiabilité des applications.

Gestion des déconnexions

La bibliothèque Go WebSocket fournit des mécanismes intégrés pour gérer les déconnexions. Lorsque le client ferme la connexion, le type [Conn](https://pkg.go.dev/github.com/gorilla/websocket#Conn) déclenche le Close événement . 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

Pour écouter cet événement, vous pouvez utiliser l'instruction defer pour [CloseHandler](https://pkg.go.dev/github.com/gorilla/websocket #CloseHandler) Fonction enregistrée sur la connexion WebSocket : 🎜rrreee🎜CloseHandler La fonction accepte deux paramètres : *Conn et une constante indiquant la raison de la fermeture (telle que websocket .CloseNormalClosure signifie arrêt normal). Cette fonction sera appelée automatiquement à la fermeture de la connexion. 🎜🎜🎜Cas pratique🎜🎜🎜Ce qui suit est un cas pratique simple de gestion des déconnexions : 🎜rrreee🎜En termes de gestion des déconnexions, CloseHandler fournit une manière simple et élégante d'aider l'application à récupérer du client événement de déconnexion et continue de fonctionner normalement. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn