Go: usare i WebSocket

Go: usare i WebSocket

I WebSocket rappresentano un protocollo di comunicazione bidirezionale su una singola connessione TCP, progettato per fornire una comunicazione in tempo reale tra client e server attraverso il web. Questa tecnologia è ampiamente utilizzata nelle applicazioni web moderne che richiedono una comunicazione istantanea, come le chat in tempo reale, giochi online, notifiche push e molto altro.

In questo articolo, esploreremo come implementare i WebSocket in Go, un linguaggio di programmazione che gode di prestazioni elevate e facilità di utilizzo.

Go fornisce un pacchetto net/http per la gestione delle richieste HTTP, ma per implementare i WebSocket, utilizzeremo la libreria di terze parti chiamata "Gorilla WebSocket". Questa libreria semplifica notevolmente l'implementazione dei WebSocket in Go.

Per installare Gorilla WebSocket, eseguiamo il seguente comando:


go get github.com/gorilla/websocket

Ora possiamo iniziare a scrivere il codice per il nostro server WebSocket. Creiamo un file chiamato server.go nella nostra directory del progetto e iniziamo a implementare il server:


// server.go
package main

import (
    "log"
    "net/http"
    "github.com/gorilla/websocket"
)

// Creiamo un upgrader per aggiornare la connessione HTTP a WebSocket
var upgrader = websocket.Upgrader{
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}

func handleWebSocket(w http.ResponseWriter, r *http.Request) {
    // Aggiorniamo la connessione HTTP a WebSocket
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println("Errore durante l'aggiornamento della connessione HTTP a WebSocket:", err)
        return
    }
    defer conn.Close()

    for {
        // Leggiamo il messaggio ricevuto dal client
        messageType, message, err := conn.ReadMessage()
        if err != nil {
            log.Println("Errore durante la lettura del messaggio:", err)
            break
        }

        // Stampiamo il messaggio ricevuto dal client sulla console del server
        log.Printf("Messaggio ricevuto: %s", message)

        // Inviamo un messaggio di risposta al client con lo stesso messaggio ricevuto
        err = conn.WriteMessage(messageType, message)
        if err != nil {
            log.Println("Errore durante l'invio del messaggio di risposta:", err)
            break
        }
    }
}

func main() {
    http.HandleFunc("/ws", handleWebSocket)
    log.Println("Server WebSocket in ascolto su http://localhost:8080/ws")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("Errore durante l'avvio del server:", err)
    }
}

Ora che abbiamo implementato il nostro server WebSocket, possiamo compilarlo ed eseguirlo:


go build
./websocket-example

Il server WebSocket ora è in ascolto all'indirizzo http://localhost:8080/ws. Puoi connetterti al server WebSocket utilizzando una libreria client WebSocket o uno strumento di test WebSocket come "websocat" o "websocket.org".

Torna su