Bagaimana untuk menutup sambungan WebSocket dengan betul di Golang

PHPz
Lepaskan: 2023-04-05 13:52:48
asal
1540 orang telah melayarinya

WebSocket di Golang ialah alat pengaturcaraan rangkaian yang berkuasa yang menyediakan kami cara untuk berkomunikasi dalam masa nyata. Apabila kami menggunakan WebSocket untuk berkomunikasi, kami mungkin menghadapi situasi di mana kami perlu menutup sambungan WebSocket. Jadi, bagaimana untuk menutup sambungan WebSocket dengan betul di Golang? Artikel ini akan memperkenalkannya kepada anda secara terperinci.

Di Golang, kita boleh menggunakan perpustakaan net/http dan github.com/gorilla/websocket dalam perpustakaan standard untuk melaksanakan sambungan WebSocket. Dalam kedua-dua kes, terdapat kaedah untuk menutup sambungan WebSocket.

Tutup sambungan WebSocket dalam pustaka standard

Dalam perpustakaan standard, kita boleh menggunakan kaedah tutup WebSocket untuk menutup sambungan. Selepas menerima mesej tutup, kami boleh memanggil kaedah tutup WebSocket untuk menutup sambungan. Contoh kod adalah seperti berikut:

func main() {
    http.HandleFunc("/ws", websocketHandler)
    http.ListenAndServe(":8080", nil)
}
func websocketHandler(w http.ResponseWriter, r *http.Request) {
    upgrader := websocket.Upgrader{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Fatal("Upgrade: ", err)
    } 
    defer conn.Close() // 关闭 WebSocket 连接

    // 读写逻辑
}
Salin selepas log masuk

Dalam contoh di atas, kami mencipta sambungan WebSocket menggunakan pakej WebSocket dalam perpustakaan standard, dan memanggil conn.Close() melalui kata kunci tangguh selepas membaca dan menulis logik telah selesai untuk menutup sambungan.

Tutup sambungan WebSocket dalam perpustakaan gorila/websocket

Dalam perpustakaan gorila/soket web, kita boleh menutup sambungan dengan memanggil kaedah Tutup WebSocket Contoh kod adalah seperti berikut:

func main() {
    http.HandleFunc("/ws", websocketHandler)
    http.ListenAndServe(":8080", nil)
}
func websocketHandler(w http.ResponseWriter, r *http.Request) {
    upgrader := websocket.Upgrader{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Fatal("Upgrade: ", err)
    } 
    defer conn.Close() // 关闭 WebSocket 连接

    // 读写逻辑
    // 关闭 WebSocket 连接
    conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
}
Salin selepas log masuk

Dalam contoh di atas, kami menggunakan perpustakaan gorila/soket web untuk mencipta sambungan WebSocket, dan selepas logik baca dan tulis tamat, hantar mesej penutup kepada pihak lain dengan memanggil kaedah conn.WriteMessage . Dengan cara ini, pihak lain boleh menutup sambungan dengan menerima mesej rapat.

Ringkasan

Sama ada anda menggunakan pakej WebSocket dalam perpustakaan standard atau menggunakan perpustakaan gorila/soket web, anda boleh menutup sambungan WebSocket melalui kaedah yang sepadan. Dalam pembangunan sebenar, kita perlu memilih perpustakaan WebSocket yang sesuai dengan kita berdasarkan situasi sebenar untuk merealisasikan fungsi komunikasi masa nyata dengan lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk menutup sambungan WebSocket dengan betul di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan