0Pricing
Go Academy · Lekcja

Podstawy WebSocket

Komunikacja dwukierunkowa w czasie rzeczywistym

Podstawy WebSocket to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Komunikacja w czasie rzeczywistym w obu kierunkach

HTTP działa w modelu żądanie–odpowiedź: klient wysyła żądanie, serwer odpowiada, a połączenie (logicznie) się kończy. Czat, pulpity aktualizowane na żywo i gry wymagają trwałego, dwukierunkowego kanału. Właśnie to zapewniają WebSockets.

Uzgadnianie przełączenia protokołu

Połączenie WebSocket zaczyna się od zwykłego żądania HTTP ze specjalnymi nagłówkami:

  • Upgrade: websocket
  • Connection: Upgrade

Serwer odpowiada 101 Switching Protocols, a gniazdo TCP jest ponownie wykorzystywane do przesyłania ramek w obu kierunkach.

Dlaczego nie używać po prostu pollingu

Zanim pojawiły się WebSockets, aplikacje korzystały z pollingu (powtarzanych żądań) lub long pollingu. Oba rozwiązania marnują przepustowość i zwiększają opóźnienia. WebSockets utrzymują jedno otwarte połączenie, dzięki czemu każda ze stron może natychmiast wysłać dane.

Ramki zamiast żądań

Po przełączeniu protokołu dane są przesyłane jako lekkie ramki, a nie komunikaty HTTP. Ramki mogą zawierać tekst lub dane binarne; istnieją również ramki sterujące służące do operacji ping/pong i zamykania połączenia.

Pełny dupleks

W przeciwieństwie do HTTP obie strony mogą wysyłać dane w dowolnym momencie, bez oczekiwania na odpowiedź. Serwer może wysłać powiadomienie natychmiast po zmianie, a klient może jednocześnie przesyłać dane wejściowe.

ws a wss

Podobnie jak w przypadku http/https, WebSockets mają dwa schematy:

  • ws:// — transmisja bez szyfrowania
  • wss:// — przez TLS (należy używać tego schematu w środowisku produkcyjnym)

Obsługa w bibliotece standardowej

Standardowa biblioteka języka Go nie zawiera implementacji WebSocket w samym net/http. Społeczność korzysta z github.com/gorilla/websocket lub nhooyr.io/websocket. Bibliotekę gorilla omówimy w następnej lekcji.

import "github.com/gorilla/websocket"

Model mentalny

Proszę wyobrazić sobie WebSocket jak rozmowę telefoniczną:

  • Wybieranie numeru = uzgadnianie aktualizacji HTTP
  • Otwarte połączenie = trwałe połączenie
  • Rozmowa w obu kierunkach = ramki pełnodupleksowe
  • Odłożenie słuchawki = ramka zamknięcia

Typy wiadomości

Najważniejsze są dwa typy ramek danych:

  • Tekstowe ramki zawierają tekst UTF-8 (często JSON)
  • Binarne ramki zawierają surowe bajty (protobuf, obrazy)

Ramki sterujące (ping, pong, close) zarządzają samym połączeniem.

Gdzie WebSockety sprawdzają się najlepiej

Doskonale sprawdzają się w:

  • czatach i informowaniu o obecności
  • notowaniach giełdowych lub wynikach sportowych na żywo
  • współedytowaniu
  • stanie gry wieloosobowej

W przypadku komunikacji wyłącznie jednokierunkowej, z serwera do klienta, prostszym rozwiązaniem mogą być Server-Sent Events.

Wykonywalny przykład: zobrazowanie ramek

Kod WebSocket wymaga zewnętrznej biblioteki, dlatego przedstawiamy analogię wykorzystującą bibliotekę standardową: funkcję, która klasyfikuje wiadomość jako tekstową lub binarną, ilustrując typy ramek.

package main

import (
    "fmt"
    "unicode/utf8"
)

func frameType(data []byte) string {
    if utf8.Valid(data) {
        return "text"
    }
    return "binary"
}

func main() {
    fmt.Println(frameType([]byte("hello")))
    fmt.Println(frameType([]byte{0xff, 0x00, 0x01}))
}

Szybkie sprawdzenie

Proszę sprawdzić swoją wiedzę o podstawach WebSocket.

Podsumowanie

Opanowali Państwo podstawy WebSocket:

  • zapewniają trwałą komunikację pełnodupleksową
  • zaczynają się od uzgadniania aktualizacji HTTP (odpowiedź 101)
  • dane są przesyłane w tekstowych lub binarnych ramkach, a ramki sterujące zarządzają połączeniem
  • w środowisku produkcyjnym należy używać wss://; Go korzysta z bibliotek takich jak gorilla/websocket

Często zadawane pytania

Czy lekcja „Podstawy WebSocket” jest bezpłatna?

Tak — pełny tekst „Podstawy WebSocket” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Podstawy WebSocket”?

Komunikacja dwukierunkowa w czasie rzeczywistym Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Podstawy WebSocket”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy WebSocket
  2. Używanie gorilla/websocket
  3. Rozgłaszanie wiadomości
  4. Zarządzanie połączeniami
← Powrót do Go Academy