Go Academy · Pelajaran

Pengurusan Sambungan

Kendalikan pemutusan sambungan

Pelajaran 4 daripada 413 langkah

Pengurusan Sambungan ialah pelajaran Go Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Go Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Go Academy merangkumi sejumlah 4 pelajaran.

Sambungan Tidak Kekal Selama-lamanya

Klien menutup tab, kehilangan Wi-Fi atau mengalami kerosakan. Pelayan WebSocket yang teguh mesti mengesan pemutusan sambungan, membersihkan sumber dan membebaskan gorutin. Jika tidak, anda akan membocorkan memori dan soket.

Jabat Tangan Penutupan

Penutupan yang bersih menghantar bingkai penutupan dalam kedua-dua arah. gorilla mendedahkan perkara ini sebagai ralat daripada ReadMessage dengan kod penutupan yang boleh anda periksa.

if websocket.IsCloseError(err, websocket.CloseNormalClosure) {
    // graceful close
}

Mekanisme Kekal Hidup Ping/Pong

Untuk mengesan sambungan separa terbuka (rakan terputus tanpa menutup sambungan), pelayan menghantar bingkai kawalan ping secara berkala dan mengharapkan balasan pong.

conn.SetPongHandler(func(string) error {
    conn.SetReadDeadline(time.Now().Add(60 * time.Second))
    return nil
})

Had Masa Membaca

Tetapkan had masa membaca supaya rakan yang terputus akhirnya menghasilkan ralat dan bukannya menyekat pelaksanaan selama-lamanya. Segarkannya setiap kali pong tiba.

conn.SetReadDeadline(time.Now().Add(60 * time.Second))

Pemasa Ping

Pemasa dalam gorutin penulis mencetuskan ping secara berkala. Jika penulisan gagal, sambungan telah mati dan anda keluar.

ticker := time.NewTicker(54 * time.Second)
defer ticker.Stop()
for range ticker.C {
    if err := conn.WriteMessage(websocket.PingMessage, nil); err != nil {
        return
    }
}

Pembersihan Semasa Keluar

Apabila gelung membaca atau menulis berakhir, nyahdaftarkan klien dan tutup sambungan. defer menjadikan perkara ini boleh dipercayai walaupun berlaku panik.

defer func() {
    hub.unregister <- client
    conn.Close()
}()

Dua Gorutin bagi Setiap Sambungan

Corak standard menjalankan readPump dan writePump bagi setiap sambungan. Apabila salah satunya mengesan ralat, ia mencetuskan pembersihan yang menghentikan yang satu lagi (selalunya dengan menutup saluran send).

Had Masa Menulis Juga

Tetapkan had masa menulis supaya penulisan yang tersekat tidak menggantung gorutin selama-lamanya. Penulisan yang tamat masa mengembalikan ralat dan anda meruntuhkan sambungan itu.

conn.SetWriteDeadline(time.Now().Add(10 * time.Second))

Penutupan Pelayan secara Anggun

Semasa pelayan ditutup, hantarkan setiap klien bingkai penutupan dan tunggu seketika. Gabungkan dengan http.Server.Shutdown dan tarikh akhir konteks.

conn.WriteMessage(websocket.CloseMessage,
    websocket.FormatCloseMessage(websocket.CloseGoingAway, "bye"))

Sambung Semula pada Klien

Pemutusan sambungan adalah perkara biasa. Klien hendaklah melaksanakan logik penyambungan semula dengan jeda eksponen. Bahagian pelayan hanya perlu mengendalikan setiap penyambungan dan pemutusan dengan bersih.

Boleh Dijalankan: Analogi Pengesanan Tamat Masa

Mekanisme kekal hidup WebSocket memerlukan pustaka; program pustaka standard ini memodelkan pemeriksaan kebolehdiaman berasaskan tarikh akhir menggunakan pemasa dan saluran.

package main

import (
    "fmt"
    "time"
)

func main() {
    pong := make(chan struct{})
    go func() {
        time.Sleep(20 * time.Millisecond) // simulate a slow/absent peer
        _ = pong                          // no pong sent -> dead connection
    }()
    select {
    case <-pong:
        fmt.Println("alive")
    case <-time.After(10 * time.Millisecond):
        fmt.Println("no pong: closing dead connection")
    }
}

Semakan Pantas

Uji pemahaman anda tentang pengurusan sambungan.

Ulang Kaji

Anda telah mempelajari pengurusan sambungan:

  • Kendalikan jabat tangan penutupan dan periksa kod penutupan
  • Gunakan ping/pong bersama had masa membaca dan menulis untuk mengesan rakan yang mati
  • Jalankan pam membaca dan menulis; lakukan pembersihan dengan defer
  • Tutup secara anggun dengan bingkai penutupan; klien bersambung semula dengan jeda
Percuma untuk bermula

Pelajari Go dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Pengurusan Sambungan” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Go Academy, termasuk “Pengurusan Sambungan”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Go Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengurusan Sambungan”?

Kendalikan pemutusan sambungan Anda berlatih Go Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Go Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Go Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Pengurusan Sambungan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Asas WebSocket
  2. Menggunakan gorilla/websocket
  3. Menyiarkan Mesej
  4. Pengurusan Sambungan
← Kembali ke Go Academy