Hi, I made a few changes to this code to make it work with gin-gonic, do you know what's going on?
https://stackoverflow.com/questions/44641773/gin-gonic-and-gorilla-websocket-does-not-propagate-message
https://github.com/utiq/go-in-5-minutes/tree/master/episode4
Comment From: ljluestc
package main
import (
"fmt"
"log"
"net/http"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
// Allow all connections for simplicity
return true
},
}
func main() {
r := gin.Default()
// Define a route to handle WebSocket connections
r.GET("/ws", handleWebSocket)
// Run the Gin server
if err := r.Run(":8080"); err != nil {
log.Fatal(err)
}
}
// handleWebSocket handles the WebSocket connections
func handleWebSocket(c *gin.Context) {
// Upgrade the HTTP connection to a WebSocket connection
conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
log.Println("Failed to upgrade connection:", err)
c.JSON(http.StatusInternalServerError, gin.H{"message": "Failed to upgrade WebSocket"})
return
}
defer conn.Close()
// Handle incoming messages and send a reply
for {
// Read a message from the WebSocket connection
_, message, err := conn.ReadMessage()
if err != nil {
log.Println("Error reading message:", err)
break
}
// Log the received message
fmt.Println("Received:", string(message))
// Send a message back to the client
err = conn.WriteMessage(websocket.TextMessage, []byte("Hello from server"))
if err != nil {
log.Println("Error sending message:", err)
break
}
}
}