Pengurusan Sambungan
Kendalikan pemutusan sambungan
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
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
- Asas WebSocket
- Menggunakan gorilla/websocket
- Menyiarkan Mesej
- Pengurusan Sambungan