Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Go WebSocket mengendalikan pemutusan sambungan?

Bagaimanakah Go WebSocket mengendalikan pemutusan sambungan?

WBOY
WBOYasal
2024-06-03 10:38:58951semak imbas

Pustaka Go WebSocket menyediakan mekanisme CloseHandler untuk mengendalikan pemutusan sambungan. Jenis Conn menyalakan acara Tutup apabila pelanggan menutup sambungan. Gunakan pernyataan penangguhan untuk mendaftarkan fungsi CloseHandler untuk mendengar acara dan menerima Conn dan pemalar sebab tutup. Fungsi CloseHandler dipanggil secara automatik, memberikan peluang untuk mengendalikan putus sambungan dan menyambung semula aplikasi.

Go WebSocket 如何处理断开连接?

Pergi WebSocket: Kendalikan pemutusan sambungan dengan anggun

Apabila membina aplikasi web masa nyata, WebSocket ialah alat yang berkuasa untuk komunikasi dua hala antara pelanggan dan pelayan. Walau bagaimanapun, adalah penting untuk mengendalikan pemutusan sambungan pelanggan untuk memastikan kestabilan dan kebolehpercayaan aplikasi.

Mengendalikan pemutusan sambungan

Pustaka Go WebSocket menyediakan mekanisme terbina dalam untuk mengendalikan pemutusan sambungan. Apabila pelanggan menutup sambungan, jenis [Conn](https://pkg.go.dev/github.com/gorilla/websocket#Conn) mencetuskan Tutup peristiwa. 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

Untuk mendengar acara ini, anda boleh menggunakan pernyataan tunda ke [CloseHandler](https://pkg.go.dev/github.com/gorilla/websocket #CloseHandler) Fungsi yang didaftarkan pada sambungan WebSocket: 🎜rrreee🎜CloseHandler Fungsi ini menerima dua parameter: *Conn dan pemalar yang menunjukkan sebab penutupan (seperti websocket .CloseNormalClosure bermaksud penutupan biasa). Fungsi ini akan dipanggil secara automatik apabila sambungan ditutup. 🎜🎜🎜Kes Praktikal🎜🎜🎜Berikut ialah kes praktikal mudah pengendalian pemutusan: 🎜rrreee🎜Dari segi pengendalian pemotongan, CloseHandler menyediakan cara yang mudah dan elegan untuk membantu Aplikasi pulih daripada pelanggan putuskan sambungan acara dan terus berfungsi seperti biasa. 🎜

Atas ialah kandungan terperinci Bagaimanakah Go WebSocket mengendalikan pemutusan sambungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn