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".