func socketHandler(emitter *emission.Emitter) http.HandlerFunc { return func(response http.ResponseWriter, request *http.Request) { socket, err := upgrader.Upgrade(response, request, nil) fmt.Println("access") if err != nil { log.Println(err) return } channel := make(chan string) handler := func(message string) { channel <- message } emitter.AddListener("message", handler) for message := range channel { err := socket.WriteMessage(websocket.TextMessage, []byte(message)) if err != nil { break } } emitter.RemoveListener("message", handler) socket.Close() } }