package main import ( "fmt" "github.com/gorilla/websocket" log "github.com/sirupsen/logrus" "net/http" "time" ) // We'll need to define an upgradeToWs // this will require a Read and Write buffer size var upgradeToWs = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func apiV1WebSocketHandler(w http.ResponseWriter, r *http.Request) { upgradeToWs.CheckOrigin = func(r *http.Request) bool { return true } ws, err := upgradeToWs.Upgrade(w, r, nil) if err != nil { log.Println(err) } // helpful log statement to show connections log.Println("Websocket Api/V1: Client Connected") wsReader(ws) } func wsReader(conn *websocket.Conn) { for { // read in a message messageType, p, err := conn.ReadMessage() if err != nil { log.Println(err) return } // print out that message for clarity fmt.Println(string(p)) if err := conn.WriteMessage(messageType, p); err != nil { log.Println(err) return } if string(p) == "send dummy string for 500 times" { go wsDummySender(conn) } } } func wsDummySender(conn *websocket.Conn) { //write subsequent 5 copies, each after 1 second log.Info("start sending server data to client ..") p := "dummy string from server " for i := 1; i < 500; i++ { time.Sleep(1 * time.Second) msg := fmt.Sprintf("copy %d, %s", i, p) log.Info("dummy sender is working, ", msg) if err := conn.WriteMessage(websocket.TextMessage, []byte(msg)); err != nil { log.Println("wsDummySender stopped on error: ", err) return } } }