Gorilla WebSocket: uma ferramenta poderosa para tempo real em Go
No desenvolvimento web moderno, a necessidade de troca de dados em tempo real está se tornando cada vez mais relevante. Seja para chats, jogos online, monitoramento de servidores ou cotações de bolsa — WebSocket é o padrão de facto para comunicação bidirecional entre cliente e servidor. Para a linguagem Go (Golang), uma das bibliotecas mais populares e estáveis para trabalhar com WebSocket é o Gorilla WebSocket.
A biblioteca gorilla/websocket faz parte do ecossistema Gorilla Toolkit — um conjunto de pacotes de alta qualidade para desenvolvimento web em Go. Ela fornece um conjunto completo de funções para criar servidores e clientes WebSocket, suporta todos os protocolos principais (RFC 6455) e se destaca pela facilidade de uso.
Principais recursos do Gorilla WebSocket
- Suporte completo ao protocolo WebSocket — trabalho com frames de texto e binários, fragmentação de mensagens, frames de controle (ping/pong).
- API conveniente — interface minimalista com as funções
ReadMessageeWriteMessage. - Suporte a TLS/SSL — conexões WebSocket seguras (wss://).
- Configuração flexível — possibilidade de definir timeouts, tamanhos de buffer, verificar a origem das requisições.
- Compatibilidade com HTTP — integra-se facilmente com qualquer servidor HTTP Go (net/http).
- Trabalho com contextos — suporte a
context.Contextpara cancelamento de operações.
Instalação da biblioteca
Para instalar o Gorilla WebSocket, execute o comando no terminal:
go get github.com/gorilla/websocketDepois disso, adicione o import no seu arquivo Go:
import "github.com/gorilla/websocket"Exemplo básico de servidor WebSocket
Vamos considerar um servidor echo simples, que aceita conexões WebSocket e envia de volta as mensagens recebidas.
package main
import ( "log" "net/http"
"github.com/gorilla/websocket")
var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true // Permite todas as origens (para desenvolvimento) },}
func echoHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Print("Upgrade failed:", err) return } defer conn.Close()
for { messageType, message, err := conn.ReadMessage() if err != nil { log.Println("Read error:", err) break } log.Printf("Received: %s", message)
if err := conn.WriteMessage(messageType, message); err != nil { log.Println("Write error:", err) break } }}
func main() { http.HandleFunc("/echo", echoHandler) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil))}Explicação detalhada do código
- Upgrader — é a estrutura que transforma uma requisição HTTP comum em uma conexão WebSocket. No exemplo, permitimos requisições de qualquer origem (campo
CheckOrigin). Em produção, é recomendável verificar domínios específicos. - Upgrade — o método principal, que pega o
http.ResponseWritere*http.Requeste retorna um*websocket.Conn. - ReadMessage — uma chamada bloqueante que aguarda uma nova mensagem do cliente. Retorna o tipo da mensagem (texto ou dados binários) e os próprios dados.
- WriteMessage — envia a mensagem de volta para o cliente. Neste caso, simplesmente retornamos o mesmo que recebemos.
Cliente WebSocket (Gorilla)
A biblioteca também permite
Também na biblioteca
Trabalhando com ZIP/arquivos em Go (Golang) — guia completo
Trabalhando com S3 e armazenamentos em nuvem em Kotlin: AWS SDK e Ktor S3 Client
Validação de dados em Java: visão geral de bibliotecas e abordagens
SwiftyUserDefaults para Swift: guia completo com exemplos