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: websocketConnection: 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 szyfrowaniawss://— 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.