package main import ( "fmt" "io/ioutil" "log" "net/http" "time" "github.com/gorilla/websocket" ) func homePage(w http.ResponseWriter, r *http.Request) { b, _ := ioutil.ReadFile("./index.html") fmt.Fprintf(w, "%s", b) } func setupRoutes() { http.HandleFunc("/", homePage) http.HandleFunc("/ws", wsEndpoint) } func main() { fmt.Println("Hello World") setupRoutes() log.Fatal(http.ListenAndServe(":8080", nil)) } var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func reader(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 } } } func wsEndpoint(w http.ResponseWriter, r *http.Request) { upgrader.CheckOrigin = func(r *http.Request) bool { return true } // upgrade this connection to a WebSocket // connection ws, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) } log.Println("Client Connected") // listen indefinitely for new messages coming // through on our WebSocket connection go reader(ws) for { log.Println("writing...") err = ws.WriteMessage(1, []byte("Hi Client!")) log.Println("written") if err != nil { log.Println(err) return } time.Sleep(time.Second) } }