Sobes.tech
Senior

Jak działa połączenie WebSocket w architekturze — w którym momencie jest ono ustanawiane i kto z kim się komunikuje?

sobes.tech AI

Odpowiedź od AI

Połączenie WebSocket jest ustanawiane za pomocą specjalnego uścisku dłoni nad protokołem HTTP:

  1. Klient wysyła żądanie HTTP z nagłówkiem Upgrade: websocket, aby przejść na protokół WebSocket.
  2. Serwer obsługujący WebSocket odpowiada potwierdzeniem i przełącza się na dwukierunkowe połączenie.

Po ustanowieniu:

  • Klient i serwer utrzymują stałe połączenie TCP.
  • Obie strony mogą w dowolnym momencie wysyłać wiadomości bez konieczności ponownego ustanawiania połączenia.

W architekturze umożliwia to realizację komunikacji w czasie rzeczywistym, np. czatu lub aktualizacji danych w czasie rzeczywistym.

Przykład w Go z użyciem pakietu gorilla/websocket:

var upgrader = websocket.Upgrader{}

func wsHandler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Print("błąd upgradowania:", err)
        return
    }
    defer conn.Close()

    for {
        _, msg, err := conn.ReadMessage()
        if err != nil {
            break
        }
        // Przetwarzanie wiadomości
        conn.WriteMessage(websocket.TextMessage, msg) // echo
    }
}

W ten sposób WebSocket zapewnia dwukierunkowe, stałe połączenie między klientem a serwerem.