gorilla/websocket Kullanımı
Bağlantıları yükseltin ve işleyin
gorilla/websocket Kullanımı, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
gorilla/websocket Kitaplığı
gorilla/websocket, en yaygın kullanılan Go WebSocket kitaplığıdır. Yükseltme el sıkışmasını yönetir ve çerçeveleri okuyup yazmanız için bir bağlantı nesnesi sağlar. go get github.com/gorilla/websocket komutuyla kurulur.
import "github.com/gorilla/websocket"Yükseltici
Bir Upgrader, HTTP isteğini WebSocket bağlantısına dönüştürür. Tampon boyutlarını ve bir kaynak denetimini yapılandırırsınız.
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}CheckOrigin ve Güvenlik
Upgrader, varsayılan olarak kaynaklar arası istekleri reddeder. Geliştirme sırasında bu denetimi gevşetebilirsiniz; ancak üretimde siteler arası WebSocket ele geçirmelerini önlemek için Origin başlığını doğrulayınız.
upgrader.CheckOrigin = func(r *http.Request) bool {
return r.Header.Get("Origin") == "https://myapp.com"
}Bir İşleyicide Yükseltme
Bir http.HandlerFunc içinde Upgrade çağrısını yapınız. Başarılı olursa bir *websocket.Conn elde edersiniz.
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
}Mesajları Okuma
ReadMessage, bir çerçeve gelene kadar bekler ve mesaj türüyle yük baytlarını döndürür.
mt, data, err := conn.ReadMessage()
if err != nil {
return // client closed or error
}
fmt.Printf("got %d bytes\n", len(data))
_ = mtMesajları Yazma
WriteMessage, belirtilen türde bir çerçeve gönderir:
err := conn.WriteMessage(websocket.TextMessage, []byte("hello"))
if err != nil {
return
}Yankı Döngüsü
Klasik bir örnek, bir mesajı okur ve onu geri yazar. Read bir hata döndürdüğünde (istemci bağlantıyı kestiğinde) döngü sona erer.
for {
mt, msg, err := conn.ReadMessage()
if err != nil {
break
}
conn.WriteMessage(mt, msg)
}JSON Yardımcıları
gorilla, Go değerlerini doğrudan soket üzerinden sıralamak ve çıkarmak için ReadJSON ve WriteJSON işlevlerini sağlar; bunlar yapılandırılmış mesajlar için kullanışlıdır. Gerçek kaynak kodda Msg yapısının alanında json:"text" etiketi bulunur.
type Msg struct {
Text string // tag: json text
}
var m Msg
conn.ReadJSON(&m)
conn.WriteJSON(Msg{Text: "ack"})Tek Okuyucu, Tek Yazıcı Kuralı
Önemli: tek bir bağlantı aynı anda yalnızca bir okuyucuya ve bir yazıcıya izin verir. Birden fazla goroutine yazıyorsa erişimi bir mutex ile koruyunuz veya yazma işlemlerini tek bir goroutine üzerinden yönlendiriniz (yayınlama dersinde ele alınacaktır).
Rotayı Kaydetme
İşleyiciyi herhangi bir HTTP rotası gibi bağlayınız. İstemciler ws://host/ws adresine bağlanır.
http.HandleFunc("/ws", wsHandler)
http.ListenAndServe(":8080", nil)Çalıştırılabilir: JSON Gidiş-Dönüş Benzetmesi
WebSocket kodu harici kitaplık gerektirir; bu standart kitaplık parçacığı, gelen bir mesajı bir haritadan çıkarıp bir yanıtı sıralayarak ReadJSON/WriteJSON işlevlerini taklit eder.
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))
}Hızlı Kontrol
gorilla/websocket kullanımını anlayıp anlamadığınızı sınayınız.
Özet
gorilla/websocket kullanmayı öğrendiniz:
- Bir
Upgraderel sıkışmasını gerçekleştirir;CheckOrigin'i doğrulayınız Upgrade, bir*websocket.ConnsağlarReadMessage/WriteMessageveya JSON yardımcılarını kullanınız- Her bağlantı için aynı anda bir okuyucu ve bir yazıcı kullanınız
Sıkça Sorulan Sorular
“gorilla/websocket Kullanımı” dersi ücretsiz mi?
Evet — “gorilla/websocket Kullanımı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“gorilla/websocket Kullanımı” dersinde ne öğreneceğim?
Bağlantıları yükseltin ve işleyin Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“gorilla/websocket Kullanımı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- WebSocket Temelleri
- gorilla/websocket Kullanımı
- İletileri Yayınlama
- Bağlantı Yönetimi