Skip to content

Websocket

A /websocket endpoint is added in routes.go to facilitate websocket connections. Upon accessing this endpoint, the server establishes a websocket connection and begins transmitting timestamp messages at 2-second intervals. WS is utilized across all Go-blueprint supported frameworks. This simple implementation showcases how flexible project is.

Code Implementation

func (s *Server) websocketHandler(c *gin.Context) {
    w := c.Writer
    r := c.Request
    socket, err := websocket.Accept(w, r, nil)

    if err != nil {
        log.Printf("could not open websocket: %v", err)
        _, _ = w.Write([]byte("could not open websocket"))
        w.WriteHeader(http.StatusInternalServerError)
        return
    }

    defer socket.Close(websocket.StatusGoingAway, "server closing websocket")

    ctx := r.Context()
    socketCtx := socket.CloseRead(ctx)

    for {
        payload := fmt.Sprintf("server timestamp: %d", time.Now().UnixNano())
        err := socket.Write(socketCtx, websocket.MessageText, []byte(payload))
        if err != nil {
            break
        }
        time.Sleep(time.Second * 2)
    }
}