Why channels do not accept new messages? Only CPU loads on all. Could anyone explain to me what the error is? Thank you in advance

SERVER

package main import ( "fmt" "net/http" "io/ioutil" "golang.org/x/net/websocket" ) var ( newClientChan chan *websocket.Conn newMessageChan chan []byte ) func indexHandle(w http.ResponseWriter, r *http.Request) { indexFile, _ := ioutil.ReadFile("chat.html") w.Write(indexFile) } func wsHandler(conn *websocket.Conn) { newClientChan <- conn for { byf := make([]byte, 512) _, err := conn.Read(byf) if err != nil { continue } newMessageChan <- byf } } func main() { newClientChan = make(chan *websocket.Conn) newMessageChan = make(chan []byte) go chatServer() http.HandleFunc("/", indexHandle) http.Handle("/ws", websocket.Handler(wsHandler)) http.ListenAndServe(":8080", nil) } func chatServer() { clients := make([]*websocket.Conn, 10) for { select { case client := <- newClientChan: clients = append(clients, client) case message := <- newMessageChan: fmt.Println(string(message)) for _, client := range clients { client.Write(message) } } } } 

CLIENT (chat.html)

 <head> <meta charset="utf-8"> 

 <input type="text" id="input"> <button>send</button> <div id="messages"></div> <script type="text/javascript"> const input = document.querySelector("#input"); const btn = document.querySelector("#btn"); const messages = document.querySelector("#messages"); const ws = new WebSocket("ws://localhost:8080/ws"); ws.onmessage = (event)=> { messages.innerHTML += messages.innerHTML+event.data+"<br>"; } ws.onopen = function(event) { btn.onclick = function() { if(!input.innerHTML) return; ws.send(input.innerHTML); } } </script> 

  • Most likely if err != nil { continue } you get err==io.EOF. if err != nil { continue } when you reach the end of the data, you get err==io.EOF. what your code starts an endless loop because _, err := conn.Read(byf) will continue to give you err==io.EOF . - biosckon
  • For your task in wsHandler() you should use websocket.Message.Receive(ws, &message) for example astaxie.gitbooks.io/build-web-application-with-golang/en/… - biosckon

0