Menggunakan gorilla/websocket
Tingkatkan dan tangani koneksi
Menggunakan gorilla/websocket adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Pustaka gorilla/websocket
gorilla/websocket adalah pustaka WebSocket Go yang paling banyak digunakan. Pustaka ini menangani jabat tangan peningkatan dan memberi Anda objek koneksi untuk membaca serta menulis bingkai. Instal dengan go get github.com/gorilla/websocket.
import "github.com/gorilla/websocket"Upgrader
Sebuah Upgrader mengubah permintaan HTTP menjadi koneksi WebSocket. Anda mengonfigurasi ukuran penyangga dan pemeriksaan asal.
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}CheckOrigin dan Keamanan
Secara bawaan, Upgrader menolak permintaan lintas asal. Selama pengembangan, Anda dapat melonggarkan aturan ini, tetapi dalam produksi validasikan header Origin untuk mencegah pembajakan WebSocket lintas situs.
upgrader.CheckOrigin = func(r *http.Request) bool {
return r.Header.Get("Origin") == "https://myapp.com"
}Melakukan Peningkatan dalam Handler
Di dalam http.HandlerFunc, panggil Upgrade. Jika berhasil, Anda mendapatkan *websocket.Conn.
func wsHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
return
}
defer conn.Close()
// read/write loop here
}Membaca Pesan
ReadMessage menunggu hingga sebuah bingkai tiba, lalu mengembalikan jenis pesan dan byte muatannya.
mt, data, err := conn.ReadMessage()
if err != nil {
return // client closed or error
}
fmt.Printf("got %d bytes\n", len(data))
_ = mtMenulis Pesan
WriteMessage mengirimkan bingkai dengan jenis tertentu:
err := conn.WriteMessage(websocket.TextMessage, []byte("hello"))
if err != nil {
return
}Perulangan Echo
Contoh klasik membaca sebuah pesan lalu menuliskannya kembali. Perulangan berakhir ketika Read mengembalikan kesalahan (klien terputus).
for {
mt, msg, err := conn.ReadMessage()
if err != nil {
break
}
conn.WriteMessage(mt, msg)
}Pembantu JSON
gorilla menyediakan ReadJSON dan WriteJSON untuk melakukan marshal nilai Go secara langsung melalui soket, yang praktis untuk pesan terstruktur. Dalam kode sumber sebenarnya, field struct Msg memiliki tag json:"text".
type Msg struct {
Text string // tag: json text
}
var m Msg
conn.ReadJSON(&m)
conn.WriteJSON(Msg{Text: "ack"})Aturan Satu Pembaca, Satu Penulis
Penting: satu koneksi hanya mengizinkan satu pembaca dan satu penulis yang berjalan secara bersamaan. Jika beberapa goroutine menulis, lindungi dengan mutex atau alirkan semua penulisan melalui satu goroutine (akan dibahas dalam materi penyiaran).
Mendaftarkan Rute
Hubungkan handler seperti rute HTTP lainnya. Klien terhubung ke ws://host/ws.
http.HandleFunc("/ws", wsHandler)
http.ListenAndServe(":8080", nil)Dapat Dijalankan: Analogi Putaran JSON
Kode WebSocket memerlukan pustaka eksternal; cuplikan pustaka standar ini meniru ReadJSON/WriteJSON dengan melakukan unmarshaling pesan masuk ke dalam peta dan marshaling balasan.
package main
import (
"encoding/json"
"fmt"
)
func main() {
in := []byte("{\"text\":\"ping\"}")
var m map[string]string
json.Unmarshal(in, &m)
reply, _ := json.Marshal(map[string]string{"text": m["text"] + "-ack"})
fmt.Println(string(reply))
}Pemeriksaan Singkat
Uji pemahaman Anda tentang penggunaan gorilla/websocket.
Rangkuman
Anda telah mempelajari cara menggunakan gorilla/websocket:
Upgradermelakukan jabat tangan; validasikanCheckOriginUpgrademenghasilkan*websocket.Conn- Gunakan
ReadMessage/WriteMessageatau pembantu JSON - Satu pembaca dan satu penulis untuk setiap koneksi pada satu waktu
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menggunakan gorilla/websocket” gratis?
Ya — teks lengkap “Menggunakan gorilla/websocket” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menggunakan gorilla/websocket”?
Tingkatkan dan tangani koneksi Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Menggunakan gorilla/websocket” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dasar-Dasar WebSocket
- Menggunakan gorilla/websocket
- Menyiarkan Pesan
- Pengelolaan Koneksi